コード例 #1
0
    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);
    }