Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: melhoria da mensagem na alteração da ordem dos documentos do pr… #425

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -165,15 +165,16 @@ update: ## Atualiza banco de dados através dos scripts de atualização do sist


destroy: .env
@$(CMD_COMPOSE_FUNC) exec org1-http bash -c "rm -rf /var/sei/arquivos/*"
@$(CMD_COMPOSE_FUNC) exec org2-http bash -c "rm -rf /var/sei/arquivos/*"
$(CMD_COMPOSE_FUNC) down --volumes


down: .env
$(CMD_COMPOSE_FUNC) stop


# make teste=TramiteProcessoComDevolucaoTest test-functional
test-functional: .env $(FILE_VENDOR_FUNCIONAL) up
test-functional: .env $(FILE_VENDOR_FUNCIONAL) up vendor
$(CMD_COMPOSE_FUNC) run --rm php-test-functional /tests/vendor/bin/phpunit -c /tests/phpunit.xml /tests/tests/$(addsuffix .php,$(teste)) ;


Expand Down Expand Up @@ -238,4 +239,7 @@ tramitar-pendencias-silent:
stop-test-container:
docker stop $$(docker ps -a -q --filter="name=php-test")

vendor: composer.json
$(CMD_COMPOSE_FUNC) run -w /tests php-test-functional bash -c './composer.phar install'


5 changes: 5 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
"php": "7.3.12"
}
},
"autoload-dev": {
"psr-4": {
"TestDTO\\": "src"
}
},
"require-dev": {
"php": "7.3.12",
"phpunit/phpunit": "*",
Expand Down
70 changes: 55 additions & 15 deletions src/rn/ProcessoEletronicoRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -652,25 +652,65 @@ public function enviarProcesso($parametros)
});

} catch (\SoapFault $e) {
$naoRespEstruturaOrg = 'Transação não autorizada, pois o sistema não é responsável pela estrutura organizacional remetente';
if (InfraString::formatarJavaScript(utf8_decode($e->faultstring)) == $naoRespEstruturaOrg) {
$strMensagem = "Por favor, observe o seguinte procedimento para realizar o mapeamento adequado: Acesse a funcionalidade Administração, em seguida selecione Processo Eletrônico Nacional e, por fim, proceda ao mapeamento utilizando somente as unidades pertinentes ao seu órgão/entidade na funcionalidade Mapeamento de Unidades. Certifique-se de seguir esse processo para garantir a correta execução do mapeamento.";
} else {
$strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(utf8_decode($e->faultstring)));
}
$strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(utf8_decode($e->faultstring)));
if ($e instanceof \SoapFault && !empty($e->detail->interoperabilidadeException->codigoErro) && $e->detail->interoperabilidadeException->codigoErro == '0005') {
$$strMensagem .= 'O código mapeado para a unidade ' . utf8_decode($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome) . ' está incorreto.';
$strMensagem .= 'O código mapeado para a unidade ' . utf8_decode($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome) . ' está incorreto.';
}

$e->faultstring = $this->validarTramitaEmAndamento($parametros, $strMensagem);
$strMensagem = $e->faultstring;
$strDetalhes = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript($this->tratarFalhaWebService($e)));
throw new InfraException($strMensagem, $e, $strDetalhes);
$strDetalhes = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript($this->tratarFalhaWebService($e)));
$detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e));
if (strpos(strtolower($strMensagem), "hash de ao menos um componente digital não confere")) {
$strMensagem = $this->validarMudancaOrdemDocumentos($parametros->dblIdProcedimento, $strMensagem, $parametros);
}
throw new InfraException($strMensagem, $e, $strDetalhes);
} catch (\Exception $e) {
$mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações.";
$detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e));
throw new InfraException($mensagem, $e, $detalhes);
$mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações.";
$detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e));
throw new InfraException($mensagem, $e, $detalhes);
}
}

/**
* Validar qual documento mudou na ordem do processo
*
* @param int $dblIdProcedimento
* @param string $strMensagem
* @param array $params
* @return string
*/
private function validarMudancaOrdemDocumentos($dblIdProcedimento, $strMensagem, $params = null)
{
$objProcessoEletronicoDTO = new ProcessoEletronicoDTO();
$objProcessoEletronicoDTO->setDblIdProcedimento($dblIdProcedimento);

$objProcessoEletronicoRN = new ProcessoEletronicoRN();
$objUltimoTramiteDTO = $objProcessoEletronicoRN->consultarUltimoTramite($objProcessoEletronicoDTO);
$numIdTramite = $objUltimoTramiteDTO->getNumIdTramite();

if (!is_null($numIdTramite) && $numIdTramite > 0) {
$objAtividadeDTO = new AtividadeDTO();
$objAtividadeDTO->setDblIdProtocolo($dblIdProcedimento);
$objAtividadeDTO->setNumIdTarefa(TarefaRN::$TI_PROCESSO_ALTERACAO_ORDEM_ARVORE);
$objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC);
$objAtividadeDTO->retNumIdAtividade();
$objAtividadeDTO->retDblIdProcedimentoProtocolo();

$objAtividadeRN = new AtividadeRN();
$arrObjAtividadeDTO = $objAtividadeRN->contarRN0035($objAtividadeDTO);

$msg = "Houve uma alteração na ordem dos documentos no processo, o que impede o reenvio de um processo que já foi tramitado pela plataforma. " .
"Portanto, é recomendado reordenar os documentos de acordo com a ordem original. " .
"Caso você seja um usuário sem permissão para reordenar o processo, é necessário entrar em contato internamente para identificar quem possui essa permissão.";

if ($arrObjAtividadeDTO > 0) {
$strMensagem = str_replace(
'hash de ao menos um componente digital não confere',
$msg,
$strMensagem
);
}
}

return $strMensagem;
}

private function validarTramitaEmAndamento($parametros, $strMensagem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ public function getTiposProcessos(int $idMapeamento, string $sinAtivo = 'S')

return $tiposProcessos;
}
}
}
10 changes: 10 additions & 0 deletions tests_sei4/funcional/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

require_once __DIR__ . '/vendor/autoload.php';

require_once __DIR__ . '/sei/src/sei/web/SEI.php';

define("DIR_SEI_WEB", __DIR__ . '/sei/src/sei/web/' );
define("DIR_TEST", __DIR__ );
define("DIR_PROJECT", __DIR__ . '/..' );
define("DIR_INFRA", __DIR__ . '/../src/infra/infra_php' );

error_reporting(E_ERROR);
restore_error_handler();

//Classes utilitárias para manipulação dos dados do SEI
require_once __DIR__ . '/src/utils/DatabaseUtils.php';
require_once __DIR__ . '/src/utils/ParameterUtils.php';
Expand Down
9 changes: 8 additions & 1 deletion tests_sei4/funcional/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@

"autoload": {
"classmap": [
"src/"
"src/",
"sei/modpen/"
]
},

"autoload-dev": {
"psr-4": {
"Tests\\": "sei/"
}
},

"require-dev": {
"phpunit/phpunit": "8.*",
"phpunit/php-code-coverage": "*",
Expand Down
23 changes: 19 additions & 4 deletions tests_sei4/funcional/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,20 @@ services:
php-test-functional:
image: processoeletronico/vagrant_sei4_httpd:${ENVIRONMENT_VERSION}
depends_on:
- org1-database
- org2-database
- org1-database
- selenium
volumes:
- ${SEI_PATH}/sei:/opt/sei
- ${SEI_PATH}/sip:/opt/sip
- ${SEI_PATH}/infra:/opt/infra
- ./assets/config:/opt/sei/config/mod-pen
- .:/tests
- ${SEI_PATH}/../tests:/tests/sei
- ${SEI_PATH}/../src:/tests/sei/src
- ./src/fixtures:/tests/sei/modpen/fixtures
- ../../src/dto:/tests/sei/modpen/dto
- ../../src/bd:/tests/sei/modpen/bd
- ./assets/config:/opt/sei/config/mod-pen
- /tmp:/tmp
environment:
- XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 start_with_request=0
Expand All @@ -66,12 +71,22 @@ services:
- ORG1_CERTIFICADO_SENHA=${ORG1_CERTIFICADO_SENHA}
- ORG2_CERTIFICADO=${ORG2_CERTIFICADO}
- ORG2_CERTIFICADO_SENHA=${ORG2_CERTIFICADO_SENHA}

- DATABASE_IMAGE=${ORG1_DATABASE_IMAGE}
- DATABASE_TYPE=${ORG1_DATABASE_TYPE}
- DATABASE_HOST=${ORG1_DATABASE_HOST}
- DATABASE_PORT=${ORG1_DATABASE_GUEST_PORT}
- SEI_CHAVE_ACESSO=${ORG1_APP_SEI_CHAVE_ACESSO}
- SEI_DATABASE_NAME=${SEI_DATABASE_NAME}
- SIP_CHAVE_ACESSO=${ORG1_APP_SIP_CHAVE_ACESSO}
- SIP_DATABASE_NAME=${SIP_DATABASE_NAME}
- SIP_DATABASE_USER=${SIP_DATABASE_USER}
- SIP_DATABASE_PASSWORD=${SIP_DATABASE_PASSWORD}
- TEST_FILES_PATH=${TEST_FILES_PATH}
extra_hosts:
- "host.docker.internal:host-gateway"
links:
- org1-database:${ORG1_DATABASE_HOST}
- org2-database:${ORG2_DATABASE_HOST}
- org1-database:${ORG1_DATABASE_HOST}
- selenium:selenium
command: "true"

Expand Down
61 changes: 61 additions & 0 deletions tests_sei4/funcional/src/fixtures/FixtureBase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

abstract class FixtureBase extends \InfraRN
{
abstract protected function cadastrar($dados);

protected function cadastrarInternoControlado($parametros){
$dto = $this->cadastrar($parametros["dados"]);

if (isset($parametros["callback"])) {
$parametros["callback"]($dto);
}

return $dto;
}

public function carregar($dados = null, $callback = null){
$dados = $dados ?: [];
return $this->cadastrarInterno([
'dados' => $dados,
'callback' => $callback
]);
}

public function carregarVarios($dados = null, $quantidade = 1){
$resultado = [];
for ($i=0; $i < $quantidade; $i++) {
$resultado[] = $this->carregar($dados);
}

return $resultado;
}

public function carregarVariados($dados){
$resultado = [];
foreach ($dados as $dado) {
$resultado[] = $this->carregar($dado);
}

return $resultado;
}

protected function listarInternoControlado($parametros){
$dto = $this->listar($parametros["dados"]);

if (isset($parametros["callback"])) {
$parametros["callback"]($dto);
}

return $dto;
}

public function buscar($dados = null, $callback = null){
$dados = $dados ?: [];
return $this->listarInterno([
'dados' => $dados,
'callback' => $callback
]);
}

}

This file was deleted.

46 changes: 46 additions & 0 deletions tests_sei4/funcional/src/paginas/PaginaReordenarProcesso.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

class PaginaReordenarProcesso extends PaginaTeste
{
public function irParaPaginaMudarOrdem()
{
$this->test->frame(null);
$this->test->frame("ifrVisualizacao");
$this->test->byXPath(utf8_encode("//img[@alt='Ordenar Árvore do Processo']"))->click();
}

public function irParaTramitarProcesso()
{
$this->test->frame(null);
$this->test->frame("ifrVisualizacao");
$this->test->byXPath(utf8_encode("//img[@alt='Envio Externo de Processo']"))->click();
}

public function clicarOptionReordenar(int $index = 0)
{
$options = $this->test->byId('selRelProtocoloProtocolo')
->elements($this->test->using('css selector')->value('option'));
$options[$index]->click();
}

public function moverParaBaixo(int $vezes = 1)
{
$botaoParaBaixo = $this->test->byXPath(utf8_encode("//img[@alt='Mover Abaixo Protocolo Selecionado']"));
for ($i=0; $i < $vezes; $i++) {
$botaoParaBaixo->click();
}
}

public function moverParaCima(int $vezes = 1)
{
$botaoParaCima = $this->test->byXPath(utf8_encode("//img[@alt='Mover Acima Protocolo Selecionado']"));
for ($i=0; $i < $vezes; $i++) {
$botaoParaCima->click();
}
}

public function salvar()
{
$this->test->byXPath("//button[@name='sbmSalvar']")->click();
}
}
Loading
Loading