From 0fa80481c4be9bf782d461f0774c85d05016b782 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:10:10 -0300 Subject: [PATCH 01/18] feat: modificar a estrutura atual para funcionamento de bibliotecas externas do PHP no projeto --- Makefile | 6 ++---- src/composer.json | 0 src/composer.phar | 0 .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_sei4/funcional/docker-compose.yml | 6 ++++++ .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_sei41/funcional/docker-compose.yml | 6 ++++++ .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_super/funcional/docker-compose.yml | 6 ++++++ 9 files changed, 74 insertions(+), 4 deletions(-) create mode 100755 src/composer.json create mode 100755 src/composer.phar create mode 100644 tests_sei4/funcional/assets/config/composer.json create mode 100644 tests_sei41/funcional/assets/config/composer.json create mode 100644 tests_super/funcional/assets/config/composer.json diff --git a/Makefile b/Makefile index 2d692f38a..bec22240b 100755 --- a/Makefile +++ b/Makefile @@ -144,6 +144,8 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install --no-dev' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install --no-dev' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" @@ -153,10 +155,6 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org2-http chmod 0644 /etc/cron.d/sip $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org2-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org2-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" - - @if [ -e tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php ]; then rm tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php; fi; - @cp tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.exemplo.php tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php - @echo "\nArquivo 'ConfiguracaoModPEN.php' restaurado conforme 'ConfiguracaoModPEN.exemplo.php'.\n"; wget -nc -i $(PEN_TEST_FUNC)/assets/arquivos/test_files_index.txt -P $(PEN_TEST_FUNC)/.tmp cp $(PEN_TEST_FUNC)/.tmp/* /tmp diff --git a/src/composer.json b/src/composer.json new file mode 100755 index 000000000..e69de29bb diff --git a/src/composer.phar b/src/composer.phar new file mode 100755 index 000000000..e69de29bb diff --git a/tests_sei4/funcional/assets/config/composer.json b/tests_sei4/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_sei4/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_sei4/funcional/docker-compose.yml b/tests_sei4/funcional/docker-compose.yml index 959cf6378..54a67abcd 100755 --- a/tests_sei4/funcional/docker-compose.yml +++ b/tests_sei4/funcional/docker-compose.yml @@ -151,6 +151,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -210,6 +213,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} diff --git a/tests_sei41/funcional/assets/config/composer.json b/tests_sei41/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_sei41/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_sei41/funcional/docker-compose.yml b/tests_sei41/funcional/docker-compose.yml index bdd44ccb9..89b0c51ad 100755 --- a/tests_sei41/funcional/docker-compose.yml +++ b/tests_sei41/funcional/docker-compose.yml @@ -149,6 +149,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -206,6 +209,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} diff --git a/tests_super/funcional/assets/config/composer.json b/tests_super/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_super/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_super/funcional/docker-compose.yml b/tests_super/funcional/docker-compose.yml index 5fc9419f5..b09161200 100755 --- a/tests_super/funcional/docker-compose.yml +++ b/tests_super/funcional/docker-compose.yml @@ -149,6 +149,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -206,6 +209,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} From 584280e017af6a333e7675654dba7c778bf97bc6 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:28:04 -0300 Subject: [PATCH 02/18] =?UTF-8?q?feat:=20alterar=20url=5Fbase=20API=20para?= =?UTF-8?q?=20vers=C3=B5es=20sei4,=20sei41,=20sei=5Fsuper=20e=20Remover=20?= =?UTF-8?q?arquivo=20de=20ConfiguracaoModPEN.exemplo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 6 +- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 6 +- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 21 +++- 6 files changed, 23 insertions(+), 307 deletions(-) delete mode 100644 tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php delete mode 100644 tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php delete mode 100644 tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php mode change 100755 => 100644 tests_super/funcional/assets/config/ConfiguracaoModPEN.php diff --git a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php index 2d86f9cc6..fc4c5768f 100755 --- a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema diff --git a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php index 042c57061..d3ceafb68 100755 --- a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema diff --git a/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_super/funcional/assets/config/ConfiguracaoModPEN.php b/tests_super/funcional/assets/config/ConfiguracaoModPEN.php old mode 100755 new mode 100644 index 2d86f9cc6..5898b5adf --- a/tests_super/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_super/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema @@ -80,7 +80,20 @@ public function getArrConfiguracoes() // Configuração padrão do Envio Parcial "EnviarApenasComponentesDigitaisPendentes" => false + // "EnviarApenasComponentesDigitaisPendentes" => array( + // "1" => array( // 1 = Poder Executivo Federal + // "123456", // Id de estrutura de unidade X do Poder Executivo Federal + // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal + // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal + // ), + // "21" => array( // 2 = Poder Legislativo Federal + // "123456", // Id de estrutura de unidade X do Poder Executivo Federal + // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal + // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal + // ) + // ) + ) ); } -} +} \ No newline at end of file From edf17c798909287562360bf031ff1a878c3ddd3f Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:35:24 -0300 Subject: [PATCH 03/18] =?UTF-8?q?feat:=20alterar=20o=20m=C3=A9todos=20da?= =?UTF-8?q?=20classe=20expedirProcedimento=20para=20funcionamento=20corret?= =?UTF-8?q?o=20com=20REST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 607 ++++++++++++++++++------------- 1 file changed, 355 insertions(+), 252 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 5f889b7c9..a870858e6 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -122,17 +122,17 @@ private function gravarLogDebug($parStrMensagem, $parNumIdentacao = 0, $parBolLo protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpedirProcedimentoDTO) { - $numIdTramite = 0; + $numIdTramite = 0; try { - //Valida Permissão - SessaoSEI::getInstance()->validarAuditarPermissao('pen_procedimento_expedir', __METHOD__, $objExpedirProcedimentoDTO); - $dblIdProcedimento = $objExpedirProcedimentoDTO->getDblIdProcedimento(); + //Valida Permissão + SessaoSEI::getInstance()->validarAuditarPermissao('pen_procedimento_expedir', __METHOD__, $objExpedirProcedimentoDTO); + $dblIdProcedimento = $objExpedirProcedimentoDTO->getDblIdProcedimento(); - $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); - $bolSinProcessamentoEmBloco = $objExpedirProcedimentoDTO->getBolSinProcessamentoEmBloco(); - $numIdBloco = $objExpedirProcedimentoDTO->getNumIdBloco(); - $numIdAtividade = $objExpedirProcedimentoDTO->getNumIdAtividade(); - $numIdUnidade = $objExpedirProcedimentoDTO->getNumIdUnidade(); + $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); + $bolSinProcessamentoEmBloco = $objExpedirProcedimentoDTO->getBolSinProcessamentoEmBloco(); + $numIdBloco = $objExpedirProcedimentoDTO->getNumIdBloco(); + $numIdAtividade = $objExpedirProcedimentoDTO->getNumIdAtividade(); + $numIdUnidade = $objExpedirProcedimentoDTO->getNumIdUnidade(); if(!$bolSinProcessamentoEmBloco){ $this->barraProgresso->exibir(); @@ -201,10 +201,10 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $objCabecalho = $this->construirCabecalho($objExpedirProcedimentoDTO, $strNumeroRegistro, $dblIdProcedimento); //Construção do processo para envio - $objProcesso = $this->construirProcesso($dblIdProcedimento, $objExpedirProcedimentoDTO->getArrIdProcessoApensado(), $objMetadadosProcessoTramiteAnterior); + $arrProcesso = $this->construirProcessoREST($dblIdProcedimento, $objExpedirProcedimentoDTO->getArrIdProcessoApensado(), $objMetadadosProcessoTramiteAnterior); //Obtém o tamanho total da barra de progreso - $nrTamanhoTotalBarraProgresso = $this->obterTamanhoTotalDaBarraDeProgresso($objProcesso); + $nrTamanhoTotalBarraProgresso = $this->obterTamanhoTotalDaBarraDeProgressoREST($arrProcesso); if(!$bolSinProcessamentoEmBloco){ //Atribui o tamanho máximo da barra de progresso @@ -223,23 +223,26 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $this->objProcessoEletronicoRN->cancelarTramite($objTramiteInconsistente->IDT); } - $param = new stdClass(); - $param->novoTramiteDeProcesso = new stdClass(); - $param->novoTramiteDeProcesso->cabecalho = $objCabecalho; - $param->novoTramiteDeProcesso->processo = $objProcesso; - $param->dblIdProcedimento = $dblIdProcedimento; - $novoTramite = $this->objProcessoEletronicoRN->enviarProcesso($param); + $param = [ + 'novoTramiteDeProcesso' => [ + 'cabecalho' => $objCabecalho, + 'processo' => $arrProcesso + ], + 'dblIdProcedimento' => $dblIdProcedimento + ]; + + $novoTramite = $this->objProcessoEletronicoRN->enviarProcessoREST($param); - $numIdTramite = $novoTramite->dadosTramiteDeProcessoCriado->IDT; + $numIdTramite = $novoTramite['IDT']; $this->lancarEventoEnvioMetadados($numIdTramite); $this->atualizarPenProtocolo($dblIdProcedimento); - if (isset($novoTramite->dadosTramiteDeProcessoCriado)) { - $objTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $this->objProcedimentoAndamentoRN->setOpts($objTramite->NRE, $objTramite->IDT, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO), $dblIdProcedimento); + if (isset($novoTramite)) { + $objTramite = $novoTramite; + $this->objProcedimentoAndamentoRN->setOpts($objTramite['NRE'], $objTramite['IDT'], ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO), $dblIdProcedimento); - try { + try { $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Envio do metadados do processo', 'S')); if($bolSinProcessamentoEmBloco){ @@ -248,27 +251,27 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); $idAtividadeExpedicao = $numIdAtividade; }else{ - $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $objProcesso->idProcedimentoSEI); + $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $arrProcesso['idProcedimentoSEI']); } $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( - $objProcesso->idProcedimentoSEI, - $objTramite->NRE, - $objTramite->IDT, + $arrProcesso['idProcedimentoSEI'], + $objTramite['NRE'], + $objTramite['IDT'], ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO, - $objTramite->dataHoraDeRegistroDoTramite, + $objTramite['dataHoraDeRegistroDoTramite'], $objExpedirProcedimentoDTO->getNumIdRepositorioOrigem(), $objExpedirProcedimentoDTO->getNumIdUnidadeOrigem(), $objExpedirProcedimentoDTO->getNumIdRepositorioDestino(), $objExpedirProcedimentoDTO->getNumIdUnidadeDestino(), - $objProcesso, - $objTramite->ticketParaEnvioDeComponentesDigitais, - $objTramite->componentesDigitaisSolicitados, + $arrProcesso, + $objTramite['ticketParaEnvioDeComponentesDigitais'], + $objTramite['processosComComponentesDigitaisSolicitados'], $bolSinProcessamentoEmBloco, $numIdUnidade); - $this->objProcessoEletronicoRN->cadastrarTramitePendente($objTramite->IDT, $idAtividadeExpedicao); + $this->objProcessoEletronicoRN->cadastrarTramitePendente($objTramite['IDT'], $idAtividadeExpedicao); //TODO: Erro no BARRAMENTO: Processo no pode ser enviado se possuir 2 documentos iguais(mesmo hash) //TODO: Melhoria no barramento de servios. O mtodo solicitar metadados no deixa claro quais os componentes digitais que @@ -277,7 +280,7 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe //componentes precisam ser baixados, semelhante ao que ocorre no enviarProcesso onde o barramento informa quais os componentes //que precisam ser enviados - $this->enviarComponentesDigitais($objTramite->NRE, $objTramite->IDT, $objProcesso->protocolo, $bolSinProcessamentoEmBloco); + $this->enviarComponentesDigitais($objTramite['NRE'], $objTramite['IDT'], $arrProcesso['protocolo'], $bolSinProcessamentoEmBloco); //TODO: Ao enviar o processo e seus documentos, necessrio bloquear os documentos para alterao //pois eles j foram visualizados @@ -300,30 +303,30 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'S')); - $this->receberReciboDeEnvio($objTramite->IDT); + $this->receberReciboDeEnvio($objTramite['IDT']); $this->gravarLogDebug(sprintf('Trâmite do processo %s foi concluído', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); $numTempoTotalRecebimento = round(microtime(true) - $numTempoInicialRecebimento, 2); $this->gravarLogDebug("Finalizado o envio de protocolo número " . $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado() . " (Tempo total: {$numTempoTotalRecebimento}s)", 0, true); - } - catch (\Exception $e) { - //Realiza o desbloqueio do processo - try{ $this->desbloquearProcessoExpedicao($objProcesso->idProcedimentoSEI); } catch (Exception $ex) { } - - //Realiza o cancelamento do tramite - try{ - if($numIdTramite != 0){ - $this->objProcessoEletronicoRN->cancelarTramite($numIdTramite); - } - } catch (InfraException $ex) { } + } + catch (\Exception $e) { + //Realiza o desbloqueio do processo + try{ $this->desbloquearProcessoExpedicao($arrProcesso['idProcedimentoSEI']); } catch (Exception $ex) { } + + //Realiza o cancelamento do tramite + try{ + if($numIdTramite != 0){ + $this->objProcessoEletronicoRN->cancelarTramite($numIdTramite); + } + } catch (InfraException $ex) { } - $this->registrarAndamentoExpedicaoAbortada($objProcesso->idProcedimentoSEI); + $this->registrarAndamentoExpedicaoAbortada($arrProcesso['idProcedimentoSEI']); $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'N')); throw $e; + } } - } } catch (\Exception $e) { $this->gravarLogDebug("Erro processando envio de processo: $e", 0, true); @@ -383,33 +386,34 @@ private function consultarMetadadosPEN($parDblIdProcedimento) * @param $parObjProcesso * @return float|int $totalBarraProgresso */ - private function obterTamanhoTotalDaBarraDeProgresso($parObjProcesso) { - $nrTamanhoMegasMaximo = ProcessoEletronicoRN::obterTamanhoBlocoTransferencia(); - $nrTamanhoBytesMaximo = ($nrTamanhoMegasMaximo * pow(1024, 2)); //Qtd de MB definido como parametro + private function obterTamanhoTotalDaBarraDeProgressoREST($parObjProcesso) { - $totalBarraProgresso = 2; - $this->contadorDaBarraDeProgresso = 2; - $arrHashIndexados = array(); - foreach ($parObjProcesso->documento as $objDoc) - { - $arrComponentesDigitais = is_array($objDoc->componenteDigital) ? $objDoc->componenteDigital : array($objDoc->componenteDigital); + $nrTamanhoMegasMaximo = ProcessoEletronicoRN::obterTamanhoBlocoTransferencia(); + $nrTamanhoBytesMaximo = ($nrTamanhoMegasMaximo * pow(1024, 2)); //Qtd de MB definido como parametro + + $totalBarraProgresso = 2; + $this->contadorDaBarraDeProgresso = 2; + $arrHashIndexados = array(); + foreach ($parObjProcesso['documentos'] as $objDoc) + { + $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); foreach ($arrComponentesDigitais as $objComponenteDigital) { - $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); + $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDadosREST($objComponenteDigital['hash']); if(!in_array($strHashComponente, $arrHashIndexados)){ - $arrHashIndexados[] = $strHashComponente; - $nrTamanhoComponente = $objComponenteDigital->tamanhoEmBytes; + $arrHashIndexados[] = $strHashComponente; + $nrTamanhoComponente = $objComponenteDigital['tamanhoEmBytes']; if($nrTamanhoComponente > $nrTamanhoBytesMaximo){ $qtdPartes = ceil($nrTamanhoComponente / $nrTamanhoBytesMaximo); $totalBarraProgresso += $qtdPartes; continue; } - $totalBarraProgresso++; + $totalBarraProgresso++; } } } - return $totalBarraProgresso; + return $totalBarraProgresso; } public function listarRepositoriosDeEstruturas() @@ -488,41 +492,53 @@ private function enviarApenasComponentesDigitaisPendentes($numIdRepositorioDesti return false; } - private function construirProcesso($dblIdProcedimento, $arrIdProcessoApensado = null, $parObjMetadadosTramiteAnterior = null) - { + public function construirProcessoREST($dblIdProcedimento, $arrIdProcessoApensado = null, $parObjMetadadosTramiteAnterior = null) + { if(!isset($dblIdProcedimento)){ throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); } + $objProcedimentoDTO = $this->consultarProcedimento($dblIdProcedimento); $objPenRelHipoteseLegalRN = new PenRelHipoteseLegalEnvioRN(); - $objProcesso = new stdClass(); - $objProcesso->staTipoProtocolo = ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; - $objProcesso->protocolo = mb_convert_encoding($objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(), 'UTF-8', 'ISO-8859-1'); - $objProcesso->nivelDeSigilo = $this->obterNivelSigiloPEN($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo()); - $objProcesso->processoDeNegocio = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrNomeTipoProcedimento(), 100), 'UTF-8', 'ISO-8859-1'); - $objProcesso->descricao = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrDescricaoProtocolo(), 100), 'UTF-8', 'ISO-8859-1'); - $objProcesso->dataHoraDeProducao = $this->objProcessoEletronicoRN->converterDataWebService($objProcedimentoDTO->getDtaGeracaoProtocolo()); - if($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO){ - $objProcesso->hipoteseLegal = new stdClass(); - $objProcesso->hipoteseLegal->identificacao = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($objProcedimentoDTO->getNumIdHipoteseLegalProtocolo()); - } - - $this->atribuirProdutorProcesso($objProcesso, $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); - $this->atribuirDataHoraDeRegistro($objProcesso, $objProcedimentoDTO->getDblIdProcedimento()); - $this->atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior); - $this->atribuirDadosInteressados($objProcesso, $dblIdProcedimento); - $this->adicionarProcessosApensados($objProcesso, $arrIdProcessoApensado); - $this->atribuirDadosHistorico($objProcesso, $dblIdProcedimento); - - $objProcesso->idProcedimentoSEI = $dblIdProcedimento; + $objProcesso = [ + 'staTipoProtocolo' => ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO, + 'protocolo' => mb_convert_encoding($objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(), 'UTF-8', 'ISO-8859-1'), + 'nivelDeSigilo' => $this->obterNivelSigiloPEN($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo()), + 'processoDeNegocio' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrNomeTipoProcedimento(), 100), 'UTF-8', 'ISO-8859-1'), + 'descricao' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrDescricaoProtocolo(), 100), 'UTF-8', 'ISO-8859-1' ), + 'dataHoraDeProducao' => $this->objProcessoEletronicoRN->converterDataWebService($objProcedimentoDTO->getDtaGeracaoProtocolo()) + ]; + + + + if ($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO) { + $objProcesso['hipoteseLegal'] = [ + 'identificacao' => $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($objProcedimentoDTO->getNumIdHipoteseLegalProtocolo()) + ]; + } + + $objProcesso = $this->atribuirProdutorProcessoREST($objProcesso, $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); + + $objProcesso = $this->atribuirDataHoraDeRegistroREST($objProcesso, $objProcedimentoDTO->getDblIdProcedimento()); + + $objProcesso = $this->atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior); + + $objProcesso = $this->atribuirDadosInteressadosREST($objProcesso, $dblIdProcedimento); + + $objProcesso = $this->adicionarProcessosApensadosREST($objProcesso, $arrIdProcessoApensado); + + $objProcesso = $this->atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento); + + $objProcesso['idProcedimentoSEI'] = $dblIdProcedimento; return $objProcesso; } + //TODO: Implementar mapeamento de atividades que sero enviadas para barramento (semelhante Protocolo Integrado) - private function atribuirDadosHistorico($objProcesso, $dblIdProcedimento) - { + private function atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento) + { $objProcedimentoHistoricoDTO = new ProcedimentoHistoricoDTO(); $objProcedimentoHistoricoDTO->setDblIdProcedimento($dblIdProcedimento); $objProcedimentoHistoricoDTO->setStrStaHistorico(ProcedimentoRN::$TH_TOTAL); @@ -533,27 +549,31 @@ private function atribuirDadosHistorico($objProcesso, $dblIdProcedimento) $arrObjAtividadeDTO = $objProcedimentoDTO->getArrObjAtividadeDTO(); if($arrObjAtividadeDTO == null || count($arrObjAtividadeDTO) == 0) { - throw new InfraException("Não foi possível obter andamentos do processo {$objProcesso->protocolo}"); + throw new InfraException("Não foi possível obter andamentos do processo {$objProcesso['protocolo']}"); } $arrObjOperacao = array(); foreach ($arrObjAtividadeDTO as $objAtividadeDTO) { - $objOperacao = new stdClass(); - $objOperacao->dataHoraOperacao = $this->objProcessoEletronicoRN->converterDataWebService($objAtividadeDTO->getDthAbertura()); - $objOperacao->unidadeOperacao = $objAtividadeDTO->getStrDescricaoUnidade()?mb_convert_encoding($objAtividadeDTO->getStrDescricaoUnidade(), 'UTF-8', 'ISO-8859-1'):"NA"; - $objOperacao->operacao = $objAtividadeDTO->getStrNomeTarefa()?$this->objProcessoEletronicoRN->reduzirCampoTexto(strip_tags(mb_convert_encoding($objAtividadeDTO->getStrNomeTarefa(), 'UTF-8', 'ISO-8859-1')), 1000):"NA"; - $objOperacao->usuario = $objAtividadeDTO->getStrNomeUsuarioOrigem()?mb_convert_encoding($objAtividadeDTO->getStrNomeUsuarioOrigem(), 'UTF-8', 'ISO-8859-1'):"NA"; + $objOperacao = [ + 'dataHoraOperacao' => $this->objProcessoEletronicoRN->converterDataWebService($objAtividadeDTO->getDthAbertura()), + 'unidadeOperacao' => $objAtividadeDTO->getStrDescricaoUnidade() ? mb_convert_encoding($objAtividadeDTO->getStrDescricaoUnidade(), 'UTF-8', 'ISO-8859-1') : "NA", + 'operacao' => $objAtividadeDTO->getStrNomeTarefa() ? $this->objProcessoEletronicoRN->reduzirCampoTexto(strip_tags(mb_convert_encoding($objAtividadeDTO->getStrNomeTarefa(), 'UTF-8', 'ISO-8859-1')), 1000) : "NA", + 'usuario' => $objAtividadeDTO->getStrNomeUsuarioOrigem() ? mb_convert_encoding($objAtividadeDTO->getStrNomeUsuarioOrigem(), 'UTF-8', 'ISO-8859-1') : "NA" + ]; + $arrObjOperacao[] = $objOperacao; } - usort($arrObjOperacao, function($obj1, $obj2){ - $dt1=new DateTime($obj1->dataHoraOperacao); - $dt2=new DateTime($obj2->dataHoraOperacao); - return $dt1>$dt2; + usort($arrObjOperacao, function($obj1, $obj2) { + $dt1 = new DateTime($obj1['dataHoraOperacao']); + $dt2 = new DateTime($obj2['dataHoraOperacao']); + return $dt1 > $dt2; }); - $objProcesso->historico = $arrObjOperacao; + $objProcesso['historico'] = $arrObjOperacao; + + return $objProcesso; } /** @@ -748,14 +768,14 @@ public static function receberRecusaProcedimento($motivo, $unidade_destino, $idP } } - private function atribuirDataHoraDeRegistro($objContexto, $dblIdProcedimento, $dblIdDocumento = null) - { - //Validar parâmetro $objContexto + private function atribuirDataHoraDeRegistroREST($objContexto, $dblIdProcedimento, $dblIdDocumento = null) + { + //Validar parâmetro $objContexto if(!isset($objContexto)) { throw new InfraException('Parâmetro $objContexto não informado.'); } - //Validar parâmetro $dbIdProcedimento + //Validar parâmetro $dbIdProcedimento if(!isset($dblIdProcedimento)) { throw new InfraException('Parâmetro $dbIdProcedimento não informado.'); } @@ -777,57 +797,71 @@ private function atribuirDataHoraDeRegistro($objContexto, $dblIdProcedimento, $d $arrObjAtividadeDTOHistorico = $objProcedimentoDTOHistorico->getArrObjAtividadeDTO(); if(isset($arrObjAtividadeDTOHistorico) && count($arrObjAtividadeDTOHistorico) == 1){ - $objContexto->dataHoraDeRegistro = $this->objProcessoEletronicoRN->converterDataWebService($arrObjAtividadeDTOHistorico[0]->getDthAbertura()); + $objContexto['dataHoraDeRegistro'] = $this->objProcessoEletronicoRN->converterDataWebService($arrObjAtividadeDTOHistorico[0]->getDthAbertura()); } - } - private function atribuirProdutorProcesso($objProcesso, $dblIdProcedimento, $numIdUnidadeGeradora) + return $objContexto; + } + + private function atribuirProdutorProcessoREST($objProcesso, $dblIdProcedimento, $numIdUnidadeGeradora) { if(!isset($objProcesso)){ throw new InfraException('Parâmetro $objProcesso não informado.'); } - $objProcesso->produtor = new stdClass(); $objUsuarioProdutor = $this->consultarUsuario($dblIdProcedimento); - if(isset($objUsuarioProdutor)) { - //Dados do produtor do processo - $objProcesso->produtor->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUsuarioProdutor->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); - //TODO: Obter tipo de pessoa física dos contatos do SEI - $objProcesso->produtor->numeroDeIdentificacao = $objUsuarioProdutor->getDblCpfContato(); - $objProcesso->produtor->tipo = self::STA_TIPO_PESSOA_FISICA; - //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) + if (isset($objUsuarioProdutor)) { + // Dados do produtor do processo + $objProcesso['produtor'] = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUsuarioProdutor->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'), + 'tipo' => self::STA_TIPO_PESSOA_FISICA + ]; + + if ($objUsuarioProdutor->getDblCpfContato()) { + $objProcesso['produtor']['numeroDeIdentificacao'] = $objUsuarioProdutor->getDblCpfContato(); + } + // TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } - + $objUnidadeGeradora = $this->consultarUnidade($dblIdProcedimento); - if(isset($objUnidadeGeradora)){ - $objProcesso->produtor->unidade = new stdClass(); - $objProcesso->produtor->unidade->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUnidadeGeradora->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); - $objProcesso->produtor->unidade->tipo = self::STA_TIPO_PESSOA_ORGAOPUBLICO; - //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) + if (isset($objUnidadeGeradora)) { + $objProcesso['produtor']['unidade'] = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUnidadeGeradora->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'), + 'tipo' => self::STA_TIPO_PESSOA_ORGAOPUBLICO + ]; + // TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } + + return $objProcesso; } - private function atribuirDadosInteressados($objProcesso, $dblIdProcedimento) - { - if(!isset($objProcesso)){ + + private function atribuirDadosInteressadosREST($objProcesso, $dblIdProcedimento) + { + if (!isset($objProcesso)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } - + $arrParticipantesDTO = $this->listarInteressados($dblIdProcedimento); - - if(isset($arrParticipantesDTO) && count($arrParticipantesDTO) > 0){ - $objProcesso->interessado = array(); - + + if (isset($arrParticipantesDTO) && count($arrParticipantesDTO) > 0) { + $objProcesso['interessados'] = array(); + foreach ($arrParticipantesDTO as $participanteDTO) { - $interessado = new stdClass(); - $interessado->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($participanteDTO->getStrNomeContato(), 150), 'UTF-8', 'ISO-8859-1'); - $objProcesso->interessado[] = $interessado; + $interessado = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($participanteDTO->getStrNomeContato(), 150), 'UTF-8', 'ISO-8859-1') + ]; + $objProcesso['interessados'][] = $interessado; } - } + } + + return $objProcesso; } - private function atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior) + private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior) { + + if(!isset($objProcesso)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } @@ -848,112 +882,120 @@ private function atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMet $arrObjCompIndexadoPorIdDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjComponentesDigitaisDTO, 'IdDocumento'); } } - - $objProcesso->documento = array(); + + $objProcesso['documentos'] = array(); foreach ($arrDocumentosRelacionados as $ordem => $objDocumentosRelacionados) { $documentoDTO = $objDocumentosRelacionados["Documento"]; $staAssociacao = $objDocumentosRelacionados["StaAssociacao"]; - $documento = new stdClass(); $objPenRelHipoteseLegalRN = new PenRelHipoteseLegalEnvioRN(); //Considera o número/nome do documento externo para descrição do documento $boolDocumentoRecebidoComNumero = $documentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO && $documentoDTO->getStrNumero() != null; $strDescricaoDocumento = ($boolDocumentoRecebidoComNumero) ? $documentoDTO->getStrNumero() : "***"; - $documento->ordem = $ordem + 1; - $documento->descricao = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strDescricaoDocumento, 100), 'UTF-8', 'ISO-8859-1'); - $documento->retirado = ($documentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) ? true : false; - $documento->nivelDeSigilo = $this->obterNivelSigiloPEN($documentoDTO->getStrStaNivelAcessoLocalProtocolo()); + $documento = []; // Inicializando $documento como um array + $documento['ordem'] = $ordem + 1; + $documento['descricao'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strDescricaoDocumento, 100), 'UTF-8', 'ISO-8859-1'); + + + $documento['retirado'] = ($documentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) ? true : false; + $documento['nivelDeSigilo'] = $this->obterNivelSigiloPEN($documentoDTO->getStrStaNivelAcessoLocalProtocolo()); + //Verifica se o documento faz parte de outro processo devido à sua anexação ou à sua movimentação - if($staAssociacao != RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO){ - if($documentoDTO->getStrProtocoloProcedimentoFormatado() != $objProcesso->protocolo){ + if($staAssociacao != RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO) { + if ($documentoDTO->getStrProtocoloProcedimentoFormatado() != $objProcesso['protocolo']) { // Caso o documento não tenha sido movido, seu protocolo é diferente devido à sua anexação à outro processo - $documento->protocoloDoProcessoAnexado = $documentoDTO->getStrProtocoloProcedimentoFormatado(); - $documento->idProcedimentoAnexadoSEI = $documentoDTO->getDblIdProcedimento(); + $documento['protocoloDoProcessoAnexado'] = $documentoDTO->getStrProtocoloProcedimentoFormatado(); + $documento['idProcedimentoAnexadoSEI'] = $documentoDTO->getDblIdProcedimento(); + } } else { // Em caso de documento movido, ele será tratado como cancelado para trâmites externos - $documento->retirado = true; + $documento['retirado'] = true; } - if($documentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO){ - $documento->hipoteseLegal = new stdClass(); - $documento->hipoteseLegal->identificacao = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($documentoDTO->getNumIdHipoteseLegalProtocolo()); + $documento['hipoteseLegal'] = array(); // Inicializando a chave 'hipoteseLegal' como um array + $documento['hipoteseLegal']['identificacao'] = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($documentoDTO->getNumIdHipoteseLegalProtocolo()); //TODO: Adicionar nome da hipótese legal atribuida ao documento } - $documento->dataHoraDeProducao = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); - $documento->produtor = new stdClass(); + $documento['dataHoraDeProducao'] = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); + $documento['dataHoraDeRegistro'] = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); + $documento['produtor'] = array(); // Inicializando a chave 'produtor' como um array $usuarioDTO = $this->consultarUsuario($documentoDTO->getNumIdUsuarioGeradorProtocolo()); if(isset($usuarioDTO)) { - $documento->produtor->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($usuarioDTO->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); - $documento->produtor->numeroDeIdentificacao = $usuarioDTO->getDblCpfContato(); - //TODO: Obter tipo de pessoa fsica dos contextos/contatos do SEI - $documento->produtor->tipo = self::STA_TIPO_PESSOA_FISICA; - ; + $documento['produtor']['nome'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($usuarioDTO->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); + $documento['produtor']['numeroDeIdentificacao'] = $usuarioDTO->getDblCpfContato(); + // TODO: Obter tipo de pessoa física dos contextos/contatos do SEI + $documento['produtor']['tipo'] = self::STA_TIPO_PESSOA_FISICA; + } - $unidadeDTO = $this->consultarUnidade($documentoDTO->getNumIdUnidadeResponsavel()); if(isset($unidadeDTO)) { - $documento->produtor->unidade = new stdClass(); - $documento->produtor->unidade->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($unidadeDTO->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); - $documento->produtor->unidade->tipo = self::STA_TIPO_PESSOA_ORGAOPUBLICO; + $documento['produtor']['unidade'] = []; // Inicializando a chave 'unidade' como um array + $documento['produtor']['unidade']['nome'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($unidadeDTO->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); + $documento['produtor']['unidade']['tipo'] = self::STA_TIPO_PESSOA_ORGAOPUBLICO; + //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } - if(array_key_exists($documentoDTO->getDblIdDocumento(), $arrObjCompIndexadoPorIdDocumentoDTO)){ $objComponenteDigitalDTO = $arrObjCompIndexadoPorIdDocumentoDTO[$documentoDTO->getDblIdDocumento()]; if(!empty($objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado())){ - $documento->ordemDoDocumentoReferenciado = $objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado(); + $documento['ordemDoDocumentoReferenciado'] = $objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado(); } } - - $documento->produtor->numeroDeIdentificacao = $documentoDTO->getStrProtocoloDocumentoFormatado(); - $this->atribuirDataHoraDeRegistro($documento, $documentoDTO->getDblIdProcedimento(), $documentoDTO->getDblIdDocumento()); - $this->atribuirEspecieDocumental($documento, $documentoDTO, $parObjMetadadosTramiteAnterior); - - $this->atribuirNumeracaoDocumento($documento, $documentoDTO); - if($documento->retirado === true){ + $documento['produtor']['numeroDeIdentificacao'] = $documentoDTO->getStrProtocoloDocumentoFormatado(); + $this->atribuirDataHoraDeRegistroREST($documento, $documentoDTO->getDblIdProcedimento(), $documentoDTO->getDblIdDocumento()); + $documento = $this->atribuirEspecieDocumentalREST($documento, $documentoDTO, $parObjMetadadosTramiteAnterior); + $documento = $this->atribuirNumeracaoDocumentoREST($documento, $documentoDTO); + + if($documento['retirado'] === true) { $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->retTodos(); $objComponenteDigitalDTO->setDblIdDocumento($documentoDTO->getDblIdDocumento()); $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); - + if($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0){ $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; - $documento->componenteDigital = new stdClass(); - $documento->componenteDigital->ordem = 1; - $documento->componenteDigital->nome = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $documento->componenteDigital->hash = new SoapVar("{$componenteDigital->getStrHashConteudo()}", XSD_ANYXML); - $documento->componenteDigital->tamanhoEmBytes = $componenteDigital->getNumTamanho(); - $documento->componenteDigital->mimeType = $componenteDigital->getStrMimeType(); - $documento->componenteDigital->tipoDeConteudo = $componenteDigital->getStrTipoConteudo(); - $documento->componenteDigital->idAnexo = $componenteDigital->getNumIdAnexo(); - $documento->componenteDigital = $this->atribuirDadosAssinaturaDigital($documentoDTO, $documento->componenteDigital, $componenteDigital->getStrHashConteudo()); + $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array + $documento['componentesDigitais']['ordem'] = 1; + $documento['componentesDigitais']['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $documento['componentesDigitais']['hash'] = [ + 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), + 'conteudo' => $componenteDigital->getStrHashConteudo() + ]; + + $documento['componentesDigitais']['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $documento['componentesDigitais']['mimeType'] = $componenteDigital->getStrMimeType(); + $documento['componentesDigitais']['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $documento['componentesDigitais']['idAnexo'] = $componenteDigital->getNumIdAnexo(); + $documento['componentesDigitais'] = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + if($componenteDigital->getStrMimeType() == 'outro'){ - $documento->componenteDigital->dadosComplementaresDoTipoDeArquivo = 'outro'; + $documento['componentesDigitais']['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } }else{ - $this->atribuirComponentesDigitais($documento, $documentoDTO, $dblIdProcedimento); + $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } }else{ - $this->atribuirComponentesDigitais($documento, $documentoDTO, $dblIdProcedimento); + $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } - // TODO: Necessário tratar informações abaixo //- protocoloDoDocumentoAnexado //- protocoloDoProcessoAnexado //- protocoloAnterior //- historico - $documento->idDocumentoSEI = $documentoDTO->getDblIdDocumento(); - $objProcesso->documento[] = $documento; + $documento['idDocumentoSEI'] = $documentoDTO->getDblIdDocumento(); + $objProcesso['documentos'][] = $documento; } + return $objProcesso; } + public function atribuirComponentesDigitaisRetirados($documentoDTO){ } @@ -970,9 +1012,9 @@ public function atribuirComponentesDigitaisRetirados($documentoDTO){ * @return int Código da espécie documental * */ - private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, $parObjMetadadosTramiteAnterior) - { - //Validação dos parâmetros da função + private function atribuirEspecieDocumentalREST($parMetaDocumento, $parDocumentoDTO, $parObjMetadadosTramiteAnterior) + { + //Validação dos parâmetros da função if(!isset($parDocumentoDTO)){ throw new InfraException('Parâmetro $parDocumentoDTO não informado.'); } @@ -980,41 +1022,38 @@ private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, if(!isset($parMetaDocumento)){ throw new InfraException('Parâmetro $parMetaDocumento não informado.'); } - $numCodigoEspecie = null; $strNomeEspecieProdutor = null; $dblIdProcedimento = $parDocumentoDTO->getDblIdProcedimento(); $dblIdDocumento = $parDocumentoDTO->getDblIdDocumento(); - //Inicialmente, busca espécie documental atribuida pelo produtor em trâmite realizado anteriormente + //Inicialmente, busca espécie documental atribuida pelo produtor em trâmite realizado anteriormente $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->retNumCodigoEspecie(); $objComponenteDigitalDTO->retStrNomeEspecieProdutor(); - // Verifica se o documento é de um processo anexado ou não e busca no - // campo correto - if(isset($parMetaDocumento->idProcedimentoAnexadoSEI)){ + // Verifica se o documento é de um processo anexado ou não e busca no + // campo correto + if(isset($parMetaDocumento['idProcedimentoAnexadoSEI'])){ $objComponenteDigitalDTO->setDblIdProcedimentoAnexado($dblIdProcedimento); } else{ $objComponenteDigitalDTO->setDblIdProcedimento($dblIdProcedimento); } - $objComponenteDigitalDTO->setDblIdDocumento($dblIdDocumento); $objComponenteDigitalDTO->setNumMaxRegistrosRetorno(1); $objComponenteDigitalDTO->setOrd('IdTramite', InfraDTO::$TIPO_ORDENACAO_DESC); - $objComponenteDigitalBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco()); + $objComponenteDigitalBD = new ComponenteDigitalBD(BancoSEI::getInstance()); $objComponenteDigitalDTO = $objComponenteDigitalBD->consultar($objComponenteDigitalDTO); if($objComponenteDigitalDTO != null){ $numCodigoEspecie = $objComponenteDigitalDTO->getNumCodigoEspecie(); $strNomeEspecieProdutor = mb_convert_encoding($objComponenteDigitalDTO->getStrNomeEspecieProdutor(), 'UTF-8', 'ISO-8859-1'); } - - //Caso a informação sobre mapeamento esteja nulo, necessário buscar tal informação no Barramento - //A lista de documentos recuperada do trâmite anterior será indexada pela sua ordem no protocolo e - //a espécie documental e o nome do produtor serão obtidos para atribuição ao documento + //Caso a informação sobre mapeamento esteja nulo, necessário buscar tal informação no Barramento + //A lista de documentos recuperada do trâmite anterior será indexada pela sua ordem no protocolo e + //a espécie documental e o nome do produtor serão obtidos para atribuição ao documento if($objComponenteDigitalDTO != null && $numCodigoEspecie == null) { if(isset($parObjMetadadosTramiteAnterior)){ $arrObjMetaDocumentosTramiteAnterior = array(); @@ -1036,22 +1075,23 @@ private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, } //Atribui espécie documental definida pelo produtor do documento e registrado no PEN, caso exista - if(count($arrMetaDocumentosAnteriorIndexado) > 0 && array_key_exists($parMetaDocumento->ordem, $arrMetaDocumentosAnteriorIndexado)){ - $numCodigoEspecie = $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento->ordem]->especie->codigo; - $strNomeEspecieProdutor = mb_convert_encoding($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento->ordem]->especie->nomeNoProdutor, 'UTF-8', 'ISO-8859-1'); + if(count($arrMetaDocumentosAnteriorIndexado) > 0 && array_key_exists($parMetaDocumento['ordem'], $arrMetaDocumentosAnteriorIndexado)){ + $numCodigoEspecie = $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->codigo; + $strNomeEspecieProdutor = mb_convert_encoding($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->nomeNoProdutor, 'UTF-8', 'ISO-8859-1'); } } } - - //Aplica o mapeamento de espécies definida pelo administrador para os novos documentos + //Aplica o mapeamento de espécies definida pelo administrador para os novos documentos if($numCodigoEspecie == null) { $numCodigoEspecie = $this->obterEspecieMapeada($parDocumentoDTO->getNumIdSerie()); $strNomeEspecieProdutor = mb_convert_encoding($parDocumentoDTO->getStrNomeSerie(), 'UTF-8', 'ISO-8859-1'); } - $parMetaDocumento->especie = new stdClass(); - $parMetaDocumento->especie->codigo = $numCodigoEspecie; - $parMetaDocumento->especie->nomeNoProdutor = $strNomeEspecieProdutor; + $parMetaDocumento['especie'] = array( + 'codigo' => $numCodigoEspecie, + 'nomeNoProdutor' => $strNomeEspecieProdutor + ); + return $parMetaDocumento; } @@ -1104,8 +1144,8 @@ private function atribuirAssinaturaEletronica($objComponenteDigital, AssinaturaD } } - private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDocumentoDTO, $dblIdProcedimento = null) - { + private function atribuirComponentesDigitaisREST($objDocumento, DocumentoDTO $objDocumentoDTO, $dblIdProcedimento = null) + { if(!isset($objDocumento)){ throw new InfraException('Parâmetro $objDocumento não informado.'); } @@ -1113,12 +1153,10 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc if(!isset($objDocumentoDTO)){ throw new InfraException('Parâmetro $objDocumentoDTO não informado.'); } - $arrObjDocumentoDTOAssociacao = $this->listarDocumentosRelacionados($dblIdProcedimento, $objDocumentoDTO->getDblIdDocumento()); $strStaAssociacao = count($arrObjDocumentoDTOAssociacao) == 1 ? $arrObjDocumentoDTOAssociacao[0]['StaAssociacao'] : null; $arrObjDadosArquivos = $this->listarDadosArquivos($objDocumentoDTO, $strStaAssociacao); - - $objDocumento->componenteDigital = array(); + $objDocumento['componentesDigitais'] = array(); foreach ($arrObjDadosArquivos as $numOrdemComponente => $objDadosArquivos) { if(!isset($objDadosArquivos) || count($objDadosArquivos) == 0){ @@ -1130,20 +1168,21 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc $strAlgoritmoHash = $objDadosArquivos['ALGORITMO_HASH_CONTEUDO']; //TODO: Revisar tal implementação para atender a gerao de hash de arquivos grandes - $objComponenteDigital = new stdClass(); - $objComponenteDigital->ordem = $numOrdemComponente; - $objComponenteDigital->nome = mb_convert_encoding($objDadosArquivos["NOME"], 'UTF-8', 'ISO-8859-1'); - $objComponenteDigital->hash = new SoapVar("{$hashDoComponenteDigital}", XSD_ANYXML); - $objComponenteDigital->tamanhoEmBytes = $objDadosArquivos['TAMANHO']; - + $objComponenteDigital = array(); + $objComponenteDigital['ordem'] = $numOrdemComponente; + $objComponenteDigital['nome'] = mb_convert_encoding($objDadosArquivos["NOME"], 'UTF-8', 'ISO-8859-1'); + $objComponenteDigital['hash'] = [ + 'algoritmo' => $strAlgoritmoHash, + 'conteudo' => $hashDoComponenteDigital + ]; + $objComponenteDigital['tamanhoEmBytes'] = $objDadosArquivos['TAMANHO']; //TODO: Validar os tipos de mimetype de acordo com o WSDL do SEI //Caso no identifique o tipo correto, informar o valor [outro] - $objComponenteDigital->mimeType = $objDadosArquivos['MIME_TYPE']; - $objComponenteDigital->tipoDeConteudo = $this->obterTipoDeConteudo($objDadosArquivos['MIME_TYPE']); - $objComponenteDigital = $this->atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteDigital, $hashDoComponenteDigital); - + $objComponenteDigital['mimeType'] = $objDadosArquivos['MIME_TYPE']; + $objComponenteDigital['tipoDeConteudo'] = $this->obterTipoDeConteudo($objDadosArquivos['MIME_TYPE']); + $objComponenteDigital = $this->atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objComponenteDigital, $hashDoComponenteDigital); if($objDadosArquivos['MIME_TYPE'] == 'outro'){ - $objComponenteDigital->dadosComplementaresDoTipoDeArquivo = $objDadosArquivos['dadosComplementaresDoTipoDeArquivo']; + $objComponenteDigital['dadosComplementaresDoTipoDeArquivo'] = $objDadosArquivos['dadosComplementaresDoTipoDeArquivo']; } //TODO: Preencher dados complementares do tipo de arquivo @@ -1152,11 +1191,12 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc //TODO: Carregar informações da assinatura digital //$this->atribuirAssinaturaEletronica($objComponenteDigital, $objDocumentoDTO); - $objComponenteDigital->idAnexo = $objDadosArquivos['ID_ANEXO']; + if (isset($objDadosArquivos['ID_ANEXO']) && !empty($objDadosArquivos['ID_ANEXO'])) { + $objComponenteDigital['idAnexo'] = $objDadosArquivos['ID_ANEXO']; + } - $objDocumento->componenteDigital[] = $objComponenteDigital; + $objDocumento['componentesDigitais'][] = $objComponenteDigital; } - return $objDocumento; } @@ -1169,8 +1209,9 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc * @param string $strHashDocumento * @return void */ - public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteDigital, $strHashDocumento) - { + + public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objComponenteDigital, $strHashDocumento) + { $objDocumentoDTOTarjas = new DocumentoDTO(); $objDocumentoDTOTarjas->retDblIdDocumento(); $objDocumentoDTOTarjas->retStrNomeSerie(); @@ -1206,7 +1247,7 @@ public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteD $objAssinaturaDTO->retStrP7sBase64(); $resAssinatura = $this->objAssinaturaRN->listarRN1323($objAssinaturaDTO); - $objComponenteDigital->assinaturaDigital = array(); + $objComponenteDigital['assinaturasDigitais'] = array(); foreach ($resAssinatura as $keyOrder => $assinatura) { $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setNumIdAtividade($assinatura->getNumIdAtividade()); //7 @@ -1216,20 +1257,33 @@ public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteD $objAtividadeRN = new AtividadeRN(); $objAtividade = $objAtividadeRN->consultarRN0033($objAtividadeDTO); - $objAssinaturaDigital = new stdClass(); - $objAssinaturaDigital->razao = mb_convert_encoding($dataTarjas[$keyOrder], 'UTF-8', 'ISO-8859-1'); - $objAssinaturaDigital->observacao = mb_convert_encoding($dataTarjas[count($dataTarjas) - 1], 'UTF-8', 'ISO-8859-1'); - $objAssinaturaDigital->dataHora = $this->objProcessoEletronicoRN->converterDataWebService($objAtividade->getDthAbertura()); + $objAssinaturaDigital = array(); + $objAssinaturaDigital['razao'] = mb_convert_encoding($dataTarjas[$keyOrder], 'UTF-8', 'ISO-8859-1'); + $objAssinaturaDigital['observacao'] = mb_convert_encoding($dataTarjas[count($dataTarjas) - 1], 'UTF-8', 'ISO-8859-1'); + $objAssinaturaDigital['dataHora'] = $this->objProcessoEletronicoRN->converterDataWebService($objAtividade->getDthAbertura()); if($assinatura->getStrStaFormaAutenticacao() == AssinaturaRN::$TA_CERTIFICADO_DIGITAL){ - $objAssinaturaDigital->hash = new SoapVar("{$strHashDocumento}", XSD_ANYXML); - $objAssinaturaDigital->cadeiaDoCertificado = new SoapVar(''.($assinatura->getStrP7sBase64() ? $assinatura->getStrP7sBase64() : 'null').'', XSD_ANYXML); + $objAssinaturaDigital['hash'] = [ + 'algoritmo' => self::ALGORITMO_HASH_ASSINATURA, + 'conteudo' => $strHashDocumento + ]; + $objAssinaturaDigital['cadeiaDoCertificado'] = [ + 'formato' => 'PKCS7', + 'conteudo' => $assinatura->getStrP7sBase64() ? $assinatura->getStrP7sBase64() : 'vazio' + ]; } else { - $objAssinaturaDigital->hash = new SoapVar("null", XSD_ANYXML); - $objAssinaturaDigital->cadeiaDoCertificado = new SoapVar('null', XSD_ANYXML); + $objAssinaturaDigital['hash'] = [ + 'algoritmo' => self::ALGORITMO_HASH_ASSINATURA, + 'conteudo' => 'vazio' + ]; + + $objAssinaturaDigital['cadeiaDoCertificado'] = [ + 'formato' => 'PKCS7', + 'conteudo' => 'vazio' + ]; } - $objComponenteDigital->assinaturaDigital[] = $objAssinaturaDigital; + $objComponenteDigital['assinaturasDigitais'][] = $objAssinaturaDigital; } return $objComponenteDigital; @@ -1716,14 +1770,53 @@ private function atribuirNumeracaoDocumento($objDocumento, DocumentoDTO $parObjD } } - private function adicionarProcessosApensados($objProcesso, $arrIdProcessoApensado) + private function atribuirNumeracaoDocumentoREST($objDocumento, DocumentoDTO $parObjDocumentoDTO) + { + $objSerieDTO = $this->consultarSerie($parObjDocumentoDTO->getNumIdSerie()); + + if(!isset($objSerieDTO)){ + throw new InfraException("Tipo de Documento não pode ser localizado. (Código: ".$parObjDocumentoDTO->getNumIdSerie().")"); + } + + $strStaNumeracao = $objSerieDTO->getStrStaNumeracao(); + + $objDocumento['identificacao'] = array(); + if ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_UNIDADE) { + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($parObjDocumentoDTO->getStrDescricaoUnidadeGeradoraProtocolo(), 100)); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ORGAO) { + $objOrgaoDTO = $this->consultarOrgao($parObjDocumentoDTO->getNumIdOrgaoUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($objOrgaoDTO->getStrSigla()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($objOrgaoDTO->getStrDescricao(), 100)); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ANUAL_UNIDADE) { + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($parObjDocumentoDTO->getStrDescricaoUnidadeGeradoraProtocolo(), 100)); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['ano'] = substr($parObjDocumentoDTO->getDtaGeracaoProtocolo(), 6, 4); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ANUAL_ORGAO) { + $objOrgaoDTO = $this->consultarOrgao($parObjDocumentoDTO->getNumIdOrgaoUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($objOrgaoDTO->getStrSigla()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($objOrgaoDTO->getStrDescricao(), 100)); + $objDocumento['identificacao']['ano'] = substr($parObjDocumentoDTO->getDtaGeracaoProtocolo(), 6, 4); + } + + return $objDocumento; + } + + private function adicionarProcessosApensadosREST($objProcesso, $arrIdProcessoApensado) { - if(isset($arrIdProcessoApensado) && is_array($arrIdProcessoApensado) && count($arrIdProcessoApensado) > 0) { - $objProcesso->processoApensado = array(); - foreach($arrIdProcessoApensado as $idProcedimentoApensado) { - $objProcesso->processoApensado[] = $this->construirProcesso($idProcedimentoApensado); + if (isset($arrIdProcessoApensado) && is_array($arrIdProcessoApensado) && count($arrIdProcessoApensado) > 0) { + $objProcesso['processoApensado'] = array(); + + foreach ($arrIdProcessoApensado as $idProcedimentoApensado) { + $objProcesso['processoApensado'][] = $this->construirProcessoREST($idProcedimentoApensado); } } + + return $objProcesso; } private function consultarUnidade($numIdUnidade) @@ -2104,7 +2197,7 @@ private function enviarComponentesDigitais($strNumeroRegistro, $numIdTramite, $s ]; $this->salvarAnexoImutavel($dados); - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($objDadosArquivo['CONTEUDO'], XSD_BASE64BINARY); + $dadosDoComponenteDigital->conteudoDoComponenteDigital = $objDadosArquivo['CONTEUDO']; $parametros = new stdClass(); $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; @@ -2262,7 +2355,7 @@ private function enviarComponenteDigitalParticionado($strCaminhoAnexo, $dadosDoC $identificacaoDaParte->fim = ($inicio + $tamanhoParteArquivo); $dadosDoComponenteDigital->identificacaoDaParte = $identificacaoDaParte; - $dadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = new SoapVar($parteDoArquivo, XSD_BASE64BINARY); + $dadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = $parteDoArquivo; $parametros = new stdClass(); $parametros->dadosDaParteDeComponenteDigital = $dadosDoComponenteDigital; @@ -2882,7 +2975,7 @@ private function enviarParteDoComponenteDigital($parInicio, $parFim, $parParteDo $identificacaoDaParte->inicio = $parInicio; $identificacaoDaParte->fim = $parFim; $parDadosDoComponenteDigital->identificacaoDaParte = $identificacaoDaParte; - $parDadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = new SoapVar($parParteDoArquivo, XSD_BASE64BINARY); + $parDadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = $parParteDoArquivo; $parametros = new stdClass(); $parametros->dadosDaParteDeComponenteDigital = $parDadosDoComponenteDigital; @@ -3066,18 +3159,28 @@ protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocol $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); $objPenBlocoProcessoDTO = $objPenBlocoProcessoRN->consultar($objPenBlocoProcessoDTO); + $cancelarLote=false; - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->getDblIdProtocolo()); - $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + if(!is_null($objPenBlocoProcessoDTO)){ + $cancelarLote=true; + } + + if(!$cancelarLote){ + + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->getDblIdProtocolo()); + $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); + + if(!isset($objTramiteDTO)){ + throw new InfraException("Trâmite não encontrado para o processo {$objDtoProtocolo->getDblIdProtocolo()}."); + } - if(isset($objTramiteDTO)) { $tramites = $this->objProcessoEletronicoRN->consultarTramites($objTramiteDTO->getNumIdTramite(), null, $objPenUnidadeDTO->getNumIdUnidadeRH(), null, null, $numIdRespositorio); $tramite = $tramites ? $tramites[0] : null; @@ -3122,7 +3225,7 @@ protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocol break; } - // Solicitação de cancelamento de tramite de processo ao TramitaGOV.br +// Solicitação de cancelamento de tramite de processo ao TramitaGOV.br // Somente solicita cancelamento ao PEN se processo ainda não estiver cancelado if(!in_array($numSituacaoAtual, array(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO_AUTOMATICAMENTE, ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO))) { $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); @@ -3398,4 +3501,4 @@ private function lancarEventoEnvioMetadados($parNumIdTramite) } } -} +} \ No newline at end of file From 70e61dcf1d23dec5de928bd8e61f2005861c575f Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:39:06 -0300 Subject: [PATCH 04/18] =?UTF-8?q?feat:=20alterar=20o=20m=C3=A9todos=20da?= =?UTF-8?q?=20classe=20PENAgendamento=20para=20funcionamento=20correto=20c?= =?UTF-8?q?om=20REST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/PENAgendamentoRN.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/rn/PENAgendamentoRN.php b/src/rn/PENAgendamentoRN.php index 634c16473..d28e16d90 100755 --- a/src/rn/PENAgendamentoRN.php +++ b/src/rn/PENAgendamentoRN.php @@ -22,12 +22,12 @@ protected function atualizarHipotesesLegaisControlado() $hipotesesPenDesativadas = $processoEletronicoRN->consultarHipotesesLegais(false); $hipoteses = array(); - if (!empty($hipotesesPen) && !empty($hipotesesPen->hipotesesLegais) && !empty($hipotesesPen->hipotesesLegais->hipotese)) { - $hipoteses = $hipotesesPen->hipotesesLegais->hipotese; + if (!empty($hipotesesPen) && !empty($hipotesesPen['hipotesesLegais'])) { + $hipoteses = $hipotesesPen['hipotesesLegais']; } - if (!empty($hipotesesPenDesativadas) && !empty($hipotesesPenDesativadas->hipotesesLegais) && !empty($hipotesesPenDesativadas->hipotesesLegais->hipotese)) { - $hipoteses = array_merge($hipoteses, $hipotesesPenDesativadas->hipotesesLegais->hipotese); + if (!empty($hipotesesPenDesativadas) && !empty($hipotesesPenDesativadas['hipotesesLegais'])) { + $hipoteses = array_merge($hipoteses, $hipotesesPenDesativadas['hipotesesLegais']); } if(empty($hipoteses)){ @@ -38,20 +38,20 @@ protected function atualizarHipotesesLegaisControlado() foreach ($hipoteses as $hipotese) { $objDTO = new PenHipoteseLegalDTO(); - $objDTO->setNumIdentificacao($hipotese->identificacao); + $objDTO->setNumIdentificacao($hipotese['identificacao']); $objDTO->setNumMaxRegistrosRetorno(1); $objDTO->retStrNome(); $objDTO->retNumIdHipoteseLegal(); $objConsulta = $objBD->consultar($objDTO); //Caso não haja um nome para a hipótese legal, ele pula para a próxima. - if (empty($hipotese->nome)) { + if (empty($hipotese['nome'])) { continue; } $objDTO->setStrNome(mb_convert_encoding($hipotese->nome, 'ISO-8859-1', 'UTF-8')); - if ($hipotese->status) { + if ($hipotese['status']) { $objDTO->setStrAtivo('S'); } else { $objDTO->setStrAtivo('N'); @@ -59,7 +59,6 @@ protected function atualizarHipotesesLegaisControlado() //Caso não exista a hipótese irá cadastra-la no sei. if (empty($objConsulta)) { - $objBD->cadastrar($objDTO); } else { //Caso contrário apenas irá atualizar os dados. From 5444eb6935d7b8daa58ef1d974b46922cd996ae8 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:40:13 -0300 Subject: [PATCH 05/18] feat: alterar estrutura da classe ProcessoEletronicoINT para funcionamento correto com REST --- src/int/ProcessoEletronicoINT.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/int/ProcessoEletronicoINT.php b/src/int/ProcessoEletronicoINT.php index 62d58ceee..cf3a4bd4f 100755 --- a/src/int/ProcessoEletronicoINT.php +++ b/src/int/ProcessoEletronicoINT.php @@ -142,13 +142,13 @@ public static function formatarHierarquia($ObjEstrutura) if(isset($ObjEstrutura->hierarquia)) { - $arrObjNivel = $ObjEstrutura->hierarquia->nivel; + $arrObjNivel = $ObjEstrutura->hierarquia; $siglasUnidades = array(); $siglasUnidades[] = $ObjEstrutura->sigla; foreach($arrObjNivel as $key => $objNivel){ - $siglasUnidades[] = $objNivel->sigla ; + $siglasUnidades[] = $objNivel->sigla; } for($i = 1; $i <= 3; $i++){ From 8b1c7afc2d03d4751f92f808ab5225f836bece9e Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 14 Nov 2024 08:29:13 -0300 Subject: [PATCH 06/18] refactor: substituir todas as rotas SOAP para REST --- src/rn/ProcessoEletronicoRN.php | 1977 +++++++++++++++++-------------- 1 file changed, 1096 insertions(+), 881 deletions(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 56a38442f..6f90bac27 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1,5 +1,12 @@ "Outro" ); - private $objPenWs; private $strEnderecoWebService; - private $options; private $numTentativasErro; - private $strComumXSD; private $strLocalCert; private $strLocalCertPassword; - public function __construct() - { - $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); - $strEnderecoWebService = $objConfiguracaoModPEN->getValor("PEN", "WebService"); - $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); - $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $numTentativasErro = $objConfiguracaoModPEN->getValor("PEN", "NumeroTentativasErro", false, self::WS_TENTATIVAS_ERRO); - $numTentativasErro = (is_numeric($numTentativasErro)) ? intval($numTentativasErro) : self::WS_TENTATIVAS_ERRO; - - $this->strEnderecoWebService = $strEnderecoWebService; - $this->strComumXSD = $this->strEnderecoWebService . '?xsd=comum.xsd'; - $this->strLocalCert = $strLocalizacaoCertificadoDigital; - $this->strLocalCertPassword = $strSenhaCertificadoDigital; - $this->numTentativasErro = $numTentativasErro; - - $this->options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $this->strLocalCert - , 'passphrase' => $this->strLocalCertPassword - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => self::WS_TIMEOUT_CONEXAO - , 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ) - ); + private $strClientGuzzle; + private $strBaseUri; + private $arrheaders; + + public function __construct() + { + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strEnderecoWebService = $objConfiguracaoModPEN->getValor("PEN", "WebService"); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + $numTentativasErro = $objConfiguracaoModPEN->getValor("PEN", "NumeroTentativasErro", false, self::WS_TENTATIVAS_ERRO); + $numTentativasErro = (is_numeric($numTentativasErro)) ? intval($numTentativasErro) : self::WS_TENTATIVAS_ERRO; + + $this->strEnderecoWebService = $strEnderecoWebService; + $this->strLocalCert = $strLocalizacaoCertificadoDigital; + $this->strLocalCertPassword = $strSenhaCertificadoDigital; + $this->numTentativasErro = $numTentativasErro; + + + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $this->strBaseUri = $strEnderecoWebService; + $this->arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $this->strClientGuzzle = new Client([ + 'base_uri' => $this->strBaseUri, + 'timeout' => 5.0, + 'headers' => $this->arrheaders, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); } - protected function inicializarObjInfraIBanco() { - return BancoSEI::getInstance(); + return BancoSEI::getInstance(); } /** - * Construtor do objeto SoapClien utilizado para comunicação Webservice SOAP + * Construtor do objeto SoapClien utilizado para comunicação Webservice * - * @return void */ private function getObjPenWs() { - if($this->objPenWs == null) { - - if (InfraString::isBolVazia($this->strEnderecoWebService)) { + if (InfraString::isBolVazia($this->strEnderecoWebService)) { throw new InfraException('Endereço do serviço de integração do Tramita GOV.BR não informado.'); - } + } - if (InfraString::isBolVazia($this->strLocalCertPassword)) { - throw new InfraException('Dados de autenticação do serviço de integração do Tramita.GOV.BR não informados.'); - } + if (InfraString::isBolVazia($this->strLocalCertPassword)) { + throw new InfraException('Dados de autenticação do serviço de integração do Tramita.GOV.BR não informados.'); + } - $this->validarDisponibilidade(); + // Validar disponibilidade do serviço + $endpoint = $this->strEnderecoWebService . 'healthcheck'; - try { - $strWSDL = $this->strEnderecoWebService . '?wsdl'; - $this->objPenWs = new BeSimple\SoapClient\SoapClient($strWSDL, $this->options); - } catch (Exception $e) { - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - $mensagem = "Falha de comunicação com o Tramita GOV.BR: " . $detalhes; - throw new \SoapFault("HTTP", $mensagem); + try{ + $response = $this->strClientGuzzle->request('GET', $endpoint); + + if ($response->getStatusCode() !== 200) { + throw new \RuntimeException('Falha ao conectar com o serviço REST'); } + } catch (RequestException $e) { + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + $mensagem = "Falha de comunicação com o Tramita GOV.BR: " . $detalhes; + throw new \Exception($mensagem); } - - return $this->objPenWs; } @@ -174,142 +179,115 @@ private function getObjPenWs() * Consulta a lista de repositório de estruturas disponíveis no Barramento de Serviços do PEN * * @param int $numIdentificacaoDoRepositorioDeEstruturas Código de identificação do repositório de estruturas do PEN - * @return void */ - public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) - { - $objRepositorioDTO = null; - try{ - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = false; - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarRepositoriosDeEstruturas($parametros); - }); - - if(isset($result->repositoriosEncontrados->repositorio)){ - - if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); - } - - foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { - if($repositorio->id == $numIdentificacaoDoRepositorioDeEstruturas){ - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio->id); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio->nome, 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio->ativo); - } - } - } - } catch(Exception $e){ - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $objRepositorioDTO; - } + public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) + { + $objRepositorioDTO = null; + $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + try { + $parametros = [ + 'ativo' => true + ]; + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $objRepositorioDTO; + } /** * Lista todo os repositórios de estruturas disponíveis no Barramento de Serviços do PEN * * @return void */ - public function listarRepositoriosDeEstruturas() - { - $arrObjRepositorioDTO = array(); - - try{ - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = true; - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarRepositoriosDeEstruturas($parametros); - }); - - if(isset($result->repositoriosEncontrados->repositorio)){ - if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); - } - - foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { - $item = new RepositorioDTO(); - $item->setNumId($repositorio->id); - $item->setStrNome(mb_convert_encoding($repositorio->nome, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($repositorio->ativo); - $arrObjRepositorioDTO[] = $item; - } - } - } catch(Exception $e){ - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjRepositorioDTO; - } - + public function listarRepositoriosDeEstruturas() + { + $arrObjRepositorioDTO = []; + $endpoint = 'repositorios-de-estruturas'; + + try { + $parametros = [ + 'ativos' => true + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + $arrObjRepositorioDTO[] = $objRepositorioDTO; + } + } + } catch(Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjRepositorioDTO; + } /** - * Método responsável por consultar as estruturas das unidades externas no barramento - * @param $idRepositorioEstrutura - * @param $numeroDeIdentificacaoDaEstrutura - * @param bool $bolRetornoRaw - * @return EstruturaDTO|mixed - * @throws InfraException - */ + * Método responsável por consultar as estruturas das unidades externas no barramento. + * + * @param int $idRepositorioEstrutura + * @param int $numeroDeIdentificacaoDaEstrutura + * @param bool $bolRetornoRaw + * @throws InfraException + * @return EstruturaDTO + */ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura, $bolRetornoRaw = false) - { + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/$numeroDeIdentificacaoDaEstrutura"; try { - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = $numeroDeIdentificacaoDaEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = false; - - $result = $this->tentarNovamenteSobErroHTTP(function ($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - if ($result->estruturasEncontradas->totalDeRegistros == 1) { - $arrObjEstrutura = is_array($result->estruturasEncontradas->estrutura) ? $result->estruturasEncontradas->estrutura : array($result->estruturasEncontradas->estrutura); - $objEstrutura = current($arrObjEstrutura); + $parametros = []; + $arrResultado = $this->get($endpoint, $parametros); - $objEstrutura->nome = mb_convert_encoding($objEstrutura->nome, 'ISO-8859-1', 'UTF-8'); - $objEstrutura->sigla = mb_convert_encoding($objEstrutura->sigla, 'ISO-8859-1', 'UTF-8'); + if ($bolRetornoRaw !== false) { + $arrResultado['nome'] = mb_convert_encoding($arrResultado['nome'], 'ISO-8859-1', 'UTF-8'); + $arrResultado['sigla'] = mb_convert_encoding($arrResultado['sigla'], 'ISO-8859-1', 'UTF-8'); - if ($bolRetornoRaw !== false) { - if (isset($objEstrutura->hierarquia) && isset($objEstrutura->hierarquia->nivel)) { - if (!is_array($objEstrutura->hierarquia->nivel)) { - $objEstrutura->hierarquia->nivel = array($objEstrutura->hierarquia->nivel); - } - - foreach ($objEstrutura->hierarquia->nivel as &$objNivel) { - $objNivel->nome = mb_convert_encoding($objNivel->nome, 'ISO-8859-1', 'UTF-8'); - } + if (isset($arrResultado['hierarquia']) && is_array($arrResultado['hierarquia'])) { + foreach ($arrResultado['hierarquia'] as &$arrHierarquia) { + $arrHierarquia['nome'] = mb_convert_encoding($arrHierarquia['nome'], 'ISO-8859-1', 'UTF-8'); } - return $objEstrutura; - } else { - $objEstruturaDTO = new EstruturaDTO(); - $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($objEstrutura->numeroDeIdentificacaoDaEstrutura); - $objEstruturaDTO->setStrNome($objEstrutura->nome); - $objEstruturaDTO->setStrSigla($objEstrutura->sigla); - $objEstruturaDTO->setBolAtivo($objEstrutura->ativo); - $objEstruturaDTO->setBolAptoParaReceberTramites($objEstrutura->aptoParaReceberTramites); - $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($objEstrutura->codigoNoOrgaoEntidade); - return $objEstruturaDTO; } + + return self::converterArrayParaObjeto($arrResultado); } + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($arrResultado['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($arrResultado['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($arrResultado['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($arrResultado['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($arrResultado['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($arrResultado['codigoNoOrgaoEntidade']); + + return $objEstruturaDTO; } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } } - /** + /** * Método responsável por recuperar pela estutura pai a estrutura de filhos de uma unidade * @param $idRepositorioEstrutura * @param null $numeroDeIdentificacaoDaEstrutura @@ -317,7 +295,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac * @return array * @throws InfraException */ - public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) + public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) { try { $estruturasUnidades = null; @@ -347,7 +325,84 @@ public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $num } } - /** + /** + * Lista estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura ID do repositório de estruturas. + * @param string $nome + * @param int $numeroDeIdentificacaoDaEstruturaRaizDaConsulta + * @param string $nomeUnidade + * @param string $siglaUnidade + * @param int $offset Offset + * @param int $registrosPorPagina + * @param bool $parBolPermiteRecebimento + * @param bool $parBolPermiteEnvio + * @throws InfraException + * @return EstruturaDTO + */ + public function listarEstruturas( + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null + ) { + $arrObjEstruturaDTO = []; + try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } + + $parametros = [ + 'apenasAtivas' => true, + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'sigla' => $siglaUnidade, + 'nome' => $nomeUnidade, + 'permiteRecebimento' => $parBolPermiteRecebimento, + 'permiteEnvio' => $parBolPermiteEnvio, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome, + 'registroInicial' => $offset, + 'quantidadeDeRegistros' => $registrosPorPagina, + ]; + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + + foreach ($arrResultado['estruturas'] as $estrutura) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO[] = $objEstruturaDTO; + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjEstruturaDTO; + } + + /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas * * @param $idRepositorioEstrutura @@ -439,95 +494,6 @@ private function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numer : array($result->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura); } - public function listarEstruturas($idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, - $nomeUnidade = null, $siglaUnidade = null, $offset = null, $registrosPorPagina = null, $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null) - { - $arrObjEstruturaDTO = array(); - - try{ - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); - if(!$idRepositorioEstrutura) { - throw new InfraException("Repositório de Estruturas inválido"); - } - - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = true; - - if(!is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)){ - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstruturaRaizDaConsulta = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta; - }else{ - $nome = trim($nome); - if(is_numeric($nome)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = intval($nome); - } else { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nome, 'UTF-8', 'ISO-8859-1'); - } - } - - if(!is_null($siglaUnidade)){ - $parametros->filtroDeEstruturas->sigla = $siglaUnidade; - } - - if(!is_null($nomeUnidade)){ - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nomeUnidade, 'UTF-8', 'ISO-8859-1'); - } - - if(!is_null($registrosPorPagina) && !is_null($offset)){ - $parametros->filtroDeEstruturas->paginacao = new stdClass(); - $parametros->filtroDeEstruturas->paginacao->registroInicial = $offset; - $parametros->filtroDeEstruturas->paginacao->quantidadeDeRegistros = $registrosPorPagina; - } - - if(!is_null($parBolPermiteRecebimento) && $parBolPermiteRecebimento === true){ - $parametros->filtroDeEstruturas->permiteRecebimento = true; - } - - if(!is_null($parBolPermiteEnvio) && $parBolPermiteEnvio === true){ - $parametros->filtroDeEstruturas->permiteEnvio = true; - } - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - - if($result->estruturasEncontradas->totalDeRegistros > 0) { - - if(!is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - - foreach ($result->estruturasEncontradas->estrutura as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($result->estruturasEncontradas->totalDeRegistros); - - if(!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); - } - - $arrObjEstruturaDTO[] = $item; - } - } - - } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjEstruturaDTO; - } public function listarEstruturasBuscaTextual( $idRepositorioEstrutura, @@ -543,71 +509,55 @@ public function listarEstruturasBuscaTextual( $arrObjEstruturaDTO = array(); try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { - throw new InfraException("Repositório de Estruturas inválido"); - } - - $totalDeRegistros = 0; - $estruturasUnidades = null; - if (is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta) || empty($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)) { - $estruturasUnidades = $this->validarRestricaoUnidadesCadastradas($idRepositorioEstrutura); - $totalDeRegistros = is_null($estruturasUnidades) ? 0 : count($estruturasUnidades); - } - - if (is_null($estruturasUnidades)) { - $result = $this->buscarListaEstruturas(array( - [ - 'idRepositorioEstrutura' => $idRepositorioEstrutura, - 'nome' => $nome, - 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta, - 'nomeUnidade' => $nomeUnidade, - 'siglaUnidade' => $siglaUnidade, - 'offset' => $offset, - 'registrosPorPagina' => $registrosPorPagina, - 'parBolPermiteRecebimento' => $parBolPermiteRecebimento, - 'parBolPermiteEnvio' => $parBolPermiteEnvio - ] - )); - - $totalDeRegistros = $result->estruturasEncontradas->totalDeRegistros; - if ($totalDeRegistros > 0 && !is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - $estruturasUnidades = $result->estruturasEncontradas->estrutura; - } - - if ($totalDeRegistros > 0) { - foreach ($estruturasUnidades as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($totalDeRegistros); - - if (!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach ($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); + throw new InfraException('Repositório de Estruturas inválido'); + } + + $parametros = [ + 'apenasAtivas' => true, + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'sigla' => $siglaUnidade, + 'nome' => $nomeUnidade, + 'permiteRecebimento' => $parBolPermiteRecebimento, + 'permiteEnvio' => $parBolPermiteEnvio, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome, + 'registroInicial' => $offset, + 'quantidadeDeRegistros' => $registrosPorPagina, + ]; + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + + foreach ($arrResultado['estruturas'] as $estrutura) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO[] = $objEstruturaDTO; } - - $arrObjEstruturaDTO[] = $item; } - } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } - return $arrObjEstruturaDTO; + return $arrObjEstruturaDTO; } - + private function buscarListaEstruturas( $idRepositorioEstrutura, $filtro = array() @@ -656,149 +606,102 @@ private function buscarListaEstruturas( } public function listarEstruturasAutoCompletar( - $idRepositorioEstrutura, - $nome = '', - $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, - $nomeUnidade = null, - $siglaUnidade = null, - $offset = null, - $registrosPorPagina = null, - $parBolPermiteRecebimento = null, - $parBolPermiteEnvio = null - ) { - $arrObjEstruturaDTO = array('diferencaDeRegistros' => 0, 'itens' => array()); - + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null + ) { + $arrObjEstruturaDTO = array('diferencaDeRegistros' => 0, 'itens' => array()); + try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { throw new InfraException("Repositório de Estruturas inválido"); } - - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = true; - - if (!is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstruturaRaizDaConsulta = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta; - } else { - $nome = trim($nome); - if (is_numeric($nome)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = intval($nome); - } else { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nome, 'UTF-8', 'ISO-8859-1'); - } - } - - if (!is_null($siglaUnidade)) { - $parametros->filtroDeEstruturas->sigla = $siglaUnidade; - } - - if (!is_null($nomeUnidade)) { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nomeUnidade, 'UTF-8', 'ISO-8859-1'); - } - - if (!is_null($registrosPorPagina) && !is_null($offset)) { - $parametros->filtroDeEstruturas->paginacao = new stdClass(); - $parametros->filtroDeEstruturas->paginacao->registroInicial = $offset; - $parametros->filtroDeEstruturas->paginacao->quantidadeDeRegistros = $registrosPorPagina; - } - - if (!is_null($parBolPermiteRecebimento) && $parBolPermiteRecebimento === true) { - $parametros->filtroDeEstruturas->permiteRecebimento = true; - } - - if (!is_null($parBolPermiteEnvio) && $parBolPermiteEnvio === true) { - $parametros->filtroDeEstruturas->permiteEnvio = true; - } - - $result = $this->tentarNovamenteSobErroHTTP(function ($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - - if ($result->estruturasEncontradas->totalDeRegistros > 0) { - - if (!is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - - foreach ($result->estruturasEncontradas->estrutura as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($result->estruturasEncontradas->totalDeRegistros); - - if (!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach ($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); - } - - $arrObjEstruturaDTO["itens"][] = $item; - } - $totalDeRegistros = $result->estruturasEncontradas->totalDeRegistros; + $parametros = [ + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'apenasAtivas' => true, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta, + 'sigla' => $siglaUnidade ?: null, + 'nome' => !is_null($nomeUnidade) ? mb_convert_encoding($nomeUnidade, 'UTF-8') : (is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta) && !is_null($nome) ? (is_numeric($nome) ? intval($nome) : mb_convert_encoding($nome, 'UTF-8')) : null), + 'registroInicial' => !is_null($registrosPorPagina) && !is_null($offset) ? $offset : null, + 'quantidadeDeRegistros' => !is_null($registrosPorPagina) && !is_null($offset) ? $registrosPorPagina : null, + 'permiteRecebimento' => $parBolPermiteRecebimento ?: null, + 'permiteEnvio' => $parBolPermiteEnvio ?: null + ]; + + $parametros = array_filter($parametros, function($value) { + return !is_null($value); + }); + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + foreach ($arrResultado['estruturas'] as $estrutura) { + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function($nivel) { + return mb_convert_encoding($nivel['sigla'], 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO["itens"][] = $objEstruturaDTO; + } + + $totalDeRegistros = $arrResultado['totalDeRegistros']; $arrObjEstruturaDTO["diferencaDeRegistros"] = $totalDeRegistros > count($arrObjEstruturaDTO["itens"]) ? - $totalDeRegistros - count($arrObjEstruturaDTO["itens"]) : 0; + $totalDeRegistros - count($arrObjEstruturaDTO["itens"]) : 0; } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } - - return $arrObjEstruturaDTO; + + return $arrObjEstruturaDTO; } - public function consultarMotivosUrgencia() - { - $curl = curl_init($this->strComumXSD); - - try{ - $bolEmProducao = boolval(ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')); - curl_setopt($curl, CURLOPT_URL, $this->strComumXSD); - curl_setopt($curl, CURLOPT_HEADER, false); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $bolEmProducao); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $bolEmProducao); - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalCert); - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strLocalCertPassword); - - $output = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($curl) { - return curl_exec($curl); - }); - - $dom = new DOMDocument(); - $dom->loadXML($output); - - $xpath = new DOMXPath($dom); - $rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI); - $xpath->registerNamespace('x', $rootNamespace); - $entries = $xpath->query('/x:schema/x:simpleType[@name="motivoDaUrgencia"]/x:restriction/x:enumeration'); - - $resultado = array(); - foreach ($entries as $entry) { - $valor = $entry->getAttribute('value'); - $documentationNode = $xpath->query('x:annotation/x:documentation', $entry); - $descricao = $documentationNode->item(0)->nodeValue; - $resultado[$valor] = mb_convert_encoding($descricao, 'ISO-8859-1', 'UTF-8'); - } - } finally{ - curl_close($curl); + public function consultarMotivosUrgencia() + { + $endpoint = 'motivosUrgencia'; + try { + $parametros = []; + + $arrResultado = $this->get($endpoint, $parametros); + $arrMotivosUrgencia = []; + if (isset($arrResultado)) { + $count = count($arrResultado['motivosUrgencia']); + + for ($i = 0; $i < $count; $i++) { + $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + } + } + + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrMotivosUrgencia; } - return $resultado; - } - - /** * Busca as espécies documentais aceitas pelo Barramento de Serviços do PEN * @@ -806,52 +709,31 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { - $curl = curl_init($this->strComumXSD); - - try{ - curl_setopt($curl, CURLOPT_URL, $this->strComumXSD); - curl_setopt($curl, CURLOPT_HEADER, 0); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - - if(!ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')){ - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); - } - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalCert); - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strLocalCertPassword); - - $output = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($curl) { - return curl_exec($curl); - }); + $endpoint = 'especies'; + try { + $parametros = []; + + $arrResultado = $this->get($endpoint, $parametros); + $arrEspecies = []; + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); + + for ($i = 0; $i < $count; $i++) { + $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); + } + } - $dom = new DOMDocument(); - $dom->loadXML($output); + } catch (Exception $e) { + $mensagem = "Não foi encontrado nenhuma espécie documental."; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } - $xpath = new DOMXPath($dom); - $rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI); - $xpath->registerNamespace('x', $rootNamespace); - $entries = $xpath->query('/x:schema/x:complexType[@name="especie"]/x:sequence/x:element[@name="codigo"]/x:simpleType/x:restriction/x:enumeration'); - if (count($entries) == 0){ - $erro_curl = empty(curl_error($curl))?'Não houve':curl_error($curl); - throw new InfraException("Não foi achado nenhuma espécie documental. Favor checar a configuração. Possível erro do curl: ".$erro_curl); - } - $resultado = array(); - foreach ($entries as $entry) { - $valor = $entry->getAttribute('value'); - $documentationNode = $xpath->query('x:annotation/x:documentation', $entry); - $descricao = $documentationNode->item(0)->nodeValue; - $resultado[$valor] = mb_convert_encoding($descricao, 'ISO-8859-1', 'UTF-8'); - } - } finally{ - curl_close($curl); + return $arrEspecies; } - return $resultado; - } - public function enviarProcesso($parametros) { @@ -861,7 +743,7 @@ public function enviarProcesso($parametros) }); } catch (\SoapFault $e) { - $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); + $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); if ($e instanceof \SoapFault && !empty($e->detail->interoperabilidadeException->codigoErro) && $e->detail->interoperabilidadeException->codigoErro == '0005') { $strMensagem .= 'O código mapeado para a unidade ' . mb_convert_encoding($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome, 'ISO-8859-1', 'UTF-8') . ' está incorreto.'; @@ -878,6 +760,31 @@ public function enviarProcesso($parametros) } } + + + public function enviarProcessoREST($parametros) + { + $endpoint = "tramites/processo"; + try { + $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); + + return $arrResultado; + + } catch (Exception $e) { + + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); + if ($erroRequest != null) { + $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; + } + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + + } + } + private function validarTramitaEmAndamento($parametros, $strMensagem) { if (strpos($strMensagem, 'já possui trâmite em andamento')) { @@ -898,30 +805,27 @@ private function validarTramitaEmAndamento($parametros, $strMensagem) public function listarPendencias($bolTodasPendencias) { - $arrObjPendenciaDTO = array(); + $endpoint = 'tramites/pendentes'; + $arrObjPendenciaDTO = []; try { - $parametros = new stdClass(); - $parametros->filtroDePendencias = new stdClass(); - $parametros->filtroDePendencias->todasAsPendencias = $bolTodasPendencias; - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->listarPendencias($parametros); - }); - - if(isset($result->listaDePendencias->IDT)){ - if(!is_array($result->listaDePendencias->IDT)) { - $result->listaDePendencias->IDT = array($result->listaDePendencias->IDT); + $parametros = [ + 'todas' => $bolTodasPendencias + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $idt) { + $pendenciaDTO = new PendenciaDTO(); + $pendenciaDTO->setNumIdentificacaoTramite($idt['IDT']); + $pendenciaDTO->setStrStatus($idt['status']); + $arrObjPendenciaDTO[] = $pendenciaDTO; + } } - foreach ($result->listaDePendencias->IDT as $idt) { - $item = new PendenciaDTO(); - $item->setNumIdentificacaoTramite($idt->_); - $item->setStrStatus($idt->status); - $arrObjPendenciaDTO[] = $item; - } - } - } catch (\Exception $e) { - $mensagem = "Falha na listagem de pendências de trâmite de processos"; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); } @@ -929,170 +833,253 @@ public function listarPendencias($bolTodasPendencias) return $arrObjPendenciaDTO; } - private function tratarFalhaWebService(Exception $fault) + private function tratarFalhaWebService(Exception $fault) { - $mensagem = InfraException::inspecionar($fault); - if($fault instanceof SoapFault && isset($fault->detail->interoperabilidadeException)) { - $strWsException = $fault->detail->interoperabilidadeException; - $mensagem = mb_convert_encoding($strWsException->mensagem, 'ISO-8859-1', 'UTF-8'); - // Fixação de mensagem de erro para quando já existe um trâmite em andamento - if($strWsException->codigoErro == "0044"){ - $mensagem = 'Processo já possui um trâmite em andamento.'; - } + $mensagem = InfraException::inspecionar($fault); + + if ($fault instanceof RequestException && $fault->hasResponse()) { + + $codigoErro = $fault->getResponse()->getStatusCode(); + $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + + // Fixação de mensagem de erro para quando já existe um trâmite em andamento + if ($codigoErro == "0044") { + $mensagem = 'Processo já possui um trâmite em andamento.'; + } + } + + return $mensagem; } - return $mensagem; - } public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $idUnidadeOrigem, $idRepositorioDestino, - $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) + $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) { - $cabecalho = new stdClass(); - if(isset($strNumeroRegistro)) { - $cabecalho->NRE = $strNumeroRegistro; - } + $cabecalho = [ + "remetente" => [ + "identificacaoDoRepositorioDeEstruturas" => $idRepositorioOrigem, + "numeroDeIdentificacaoDaEstrutura" => $idUnidadeOrigem, + ], + "destinatario" => [ + "identificacaoDoRepositorioDeEstruturas" => $idRepositorioDestino, + "numeroDeIdentificacaoDaEstrutura" => $idUnidadeDestino, + ], + "enviarApenasComponentesDigitaisPendentes" => !$enviarTodosDocumentos + ]; + + if (isset($urgente) && !empty($urgente)) { + $cabecalho['urgencia'] = $urgente; + } + + if (isset($motivoUrgencia) && !empty($motivoUrgencia)) { + $cabecalho['motivoDaUrgencia'] = $urgente; + } + + if (isset($strNumeroRegistro) && !empty($strNumeroRegistro)) { + $cabecalho['NRE'] = $strNumeroRegistro; + } - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $idRepositorioOrigem; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $idUnidadeOrigem; - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $idRepositorioDestino; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura = $idUnidadeDestino; + $atribuirInformacoes = $this->atribuirInformacoesAssuntoREST($cabecalho, $dblIdProcedimento); + $atribuirInfoModulo = $this->atribuirInformacoesModuloREST($cabecalho); - $cabecalho->urgente = $urgente; - $cabecalho->motivoDaUrgencia = $motivoUrgencia; - //Parâmetro abaixo foi descontinuado por falhas e substituido pelo enviarApenasComponentesDigitaisPendentes - $cabecalho->enviarApenasComponentesDigitaisPendentes = !$enviarTodosDocumentos; + if (!empty($atribuirInformacoes)) { + $cabecalho = $atribuirInformacoes; + } - $this->atribuirInformacoesAssunto($cabecalho, $dblIdProcedimento); - $this->atribuirInformacoesModulo($cabecalho); + if (!empty($atribuirInfoModulo)) { + $cabecalho = $atribuirInfoModulo; + } return $cabecalho; } - private function atribuirInformacoesModulo($objCabecalho) + private function atribuirInformacoesModuloREST($objCabecalho) { - try{ + $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); + $objCabecalho['propriedadesAdicionais'][] = [ + 'chave' => 'MODULO_PEN_VERSAO', + 'valor' => $objInfraParametro->getValor('VERSAO_MODULO_PEN') + ]; - $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco()); - $arrPropAdicionais=$objCabecalho->propriedadeAdicional; - $arrPropAdicionais[] = new SoapVar("". $objInfraParametro->getValor('VERSAO_MODULO_PEN') . "", XSD_ANYXML); - - $objCabecalho->propriedadeAdicional= $arrPropAdicionais; + return $objCabecalho; }catch(Exception $e){ throw new InfraException($mensagem, $e); } - - } - private function atribuirInformacoesAssunto($objCabecalho, $dblIdProcedimento) - { + private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) + { try{ + if(!isset($dblIdProcedimento)){ + throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); + } - if(!isset($dblIdProcedimento)){ - throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); - } - - $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); - $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); - $objRelProtocoloAssuntoDTO->retStrDescricaoAssunto(); - $objRelProtocoloAssuntoDTO->retNumIdAssunto(); - $objRelProtocoloAssuntoDTO->setOrdNumSequencia(InfraDTO::$TIPO_ORDENACAO_ASC); + $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); + $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); + $objRelProtocoloAssuntoDTO->retStrDescricaoAssunto(); + $objRelProtocoloAssuntoDTO->retNumIdAssunto(); + $objRelProtocoloAssuntoDTO->setOrdNumSequencia(InfraDTO::$TIPO_ORDENACAO_ASC); - $objRelProtocoloAssuntoRN = new RelProtocoloAssuntoRN(); - $arrobjRelProtocoloAssuntoDTO = $objRelProtocoloAssuntoRN->listarRN0188($objRelProtocoloAssuntoDTO); + $objRelProtocoloAssuntoRN = new RelProtocoloAssuntoRN(); + $arrobjRelProtocoloAssuntoDTO = $objRelProtocoloAssuntoRN->listarRN0188($objRelProtocoloAssuntoDTO); - $arrDadosAssunto = array(); - $contagem=1; - $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $arrDadosAssunto = array(); + $contagem=1; + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { + foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { - $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); - $assuntoDTO = new AssuntoDTO(); - $assuntoDTO->setNumIdAssunto($idAssunto); - $assuntoDTO->retNumPrazoCorrente(); - $assuntoDTO->retNumPrazoIntermediario(); - $assuntoDTO->retStrStaDestinacao(); - $assuntoDTO->retStrObservacao(); - $assuntoDTO->retStrCodigoEstruturado(); + $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); + $assuntoDTO = new AssuntoDTO(); + $assuntoDTO->setNumIdAssunto($idAssunto); + $assuntoDTO->retNumPrazoCorrente(); + $assuntoDTO->retNumPrazoIntermediario(); + $assuntoDTO->retStrStaDestinacao(); + $assuntoDTO->retStrObservacao(); + $assuntoDTO->retStrCodigoEstruturado(); - $objAssuntoRN = new AssuntoRN(); - $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); + $objAssuntoRN = new AssuntoRN(); + $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); switch ($infoAssunto->getStrStaDestinacao()) { - case AssuntoRN::$TD_ELIMINACAO: + case AssuntoRN::$TD_ELIMINACAO: $destinacao = "Eliminação"; - break; + break; + + case AssuntoRN::$TD_GUARDA_PERMANENTE: + $destinacao = "Guarda Permanente"; + break; + } + + $valorInput = $objRelProtocoloAssuntoDTO->getStrDescricaoAssunto() ? + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($objRelProtocoloAssuntoDTO->getStrDescricaoAssunto(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; - case AssuntoRN::$TD_GUARDA_PERMANENTE: - $destinacao = "Guarda Permanente"; - break; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getStrCodigoEstruturado() ? + utf8_encode($infoAssunto->getStrCodigoEstruturado()) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getNumPrazoCorrente() ? + (int) $infoAssunto->getNumPrazoCorrente() + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getNumPrazoIntermediario() ? + (int) $infoAssunto->getNumPrazoIntermediario() + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $destinacao ? + utf8_encode($destinacao) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getStrObservacao() ? + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, + 'valor' => $valorInput + ]; + + $contagem++; } + $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; + return $objCabecalho; - $valorInput=$objRelProtocoloAssuntoDTO->getStrDescricaoAssunto()?mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($objRelProtocoloAssuntoDTO->getStrDescricaoAssunto(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + }catch(Exception $e){ + $mensagem = "Falha ao atribuir informações de assunto"; + throw new InfraException($mensagem, $e); + } - $valorInput=$infoAssunto->getStrCodigoEstruturado()?mb_convert_encoding($infoAssunto->getStrCodigoEstruturado(), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + } - $valorInput=$infoAssunto->getNumPrazoCorrente()? (int) $infoAssunto->getNumPrazoCorrente() :"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + public function enviarComponenteDigital($parametros) + { + try { - $valorInput=$infoAssunto->getNumPrazoIntermediario()?(int) $infoAssunto->getNumPrazoIntermediario():"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $objParametros = $parametros->dadosDoComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; - $valorInput=$destinacao?mb_convert_encoding($destinacao, 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + $conteudo = $objParametros->conteudoDoComponenteDigital; - $valorInput=$infoAssunto->getStrObservacao()?mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; - $contagem++; - } + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $objCabecalho->propriedadeAdicional= $arrDadosAssunto; + $strBaseUri = $this->strEnderecoWebService; - }catch(Exception $e){ + $arrheaders = [ + 'Accept' => '*/*', + ]; - throw new InfraException($mensagem, $e); - } + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); - } + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - public function enviarComponenteDigital($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use (&$parametros) { - return $objPenWs->enviarComponenteDigital($parametros); - }); - } catch (\Exception $e) { - $mensagem = "Falha no envio de componentes digitais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + } catch (\Exception $e) { + $mensagem = "Falha no envio de componentes digitais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } - } - /** * Método responsável por realizar o envio da parte de um componente digital @@ -1100,17 +1087,68 @@ public function enviarComponenteDigital($parametros) * @return mixed * @throws InfraException */ - public function enviarParteDeComponenteDigital($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use (&$parametros) { - return $objPenWs->enviarParteDeComponenteDigital($parametros); - }); - } catch (\Exception $e) { - $mensagem = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e); + public function enviarParteDeComponenteDigital($parametros) + { + try { + + $objParametros = $parametros->dadosDaParteDeComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + + $indetificacaoDaParte = $objParametros->identificacaoDaParte; + $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; + + $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; + + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + + $strBaseUri = $this->strEnderecoWebService; + + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); + + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'arquivo_externo.html', + // 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + } catch (\Exception $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } - } /** * Método responsável por sinalizar o término do envio das partes de um componente digital @@ -1119,11 +1157,20 @@ public function enviarParteDeComponenteDigital($parametros) * @throws InfraException */ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) - { + { try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->sinalizarTerminoDeEnvioDasPartesDoComponente($parametros); - }); + $objParametros = $parametros->dadosDoTerminoDeEnvioDePartes; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $arrIdentificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $objParametros->hashDoComponenteDigital, + 'protocolo' => $objParametros->protocolo, + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/sinalizacao-termino-envio"; + + return $this->post($endpoint, $arrIdentificacaoDoComponenteDigital); + } catch (\Exception $e) { $mensagem = "Falha em sinalizar o término de envio das partes do componente digital"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1131,16 +1178,36 @@ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) } } + public function solicitarMetadados($parNumIdentificacaoTramite) { + $endpoint = "tramites/{$parNumIdentificacaoTramite}"; try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdentificacaoTramite; - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - $objMetadadosProtocolo = $objPenWs->solicitarMetadados($parametros); - $objMetadadosProtocolo->IDT = $parametros->IDT; - return $objMetadadosProtocolo; - }); + $parametros = [ + 'IDT' => $parNumIdentificacaoTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['propriedadeAdicional'] = $arrResultado['propriedadesAdicionais']; + + $arrResultadoDocumentos = $arrResultado['processo']['documentos'][0]; + $arrResultado['processo']['documentos'][0]['componenteDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]; + $arrResultado['processo']['documentos'][0]['componenteDigital']['assinaturaDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]['assinaturasDigitais'][0]; + + $objResultado = new stdClass(); + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + + $objMetaProcesso = $objResultado->metadados->processo; + $arrObjMetaDocumento = (array) $objMetaProcesso->documentos; + $arrObjMetaInteressado = (array) $objMetaProcesso->interessados; + + $objResultado->IDT = $parNumIdentificacaoTramite; + $objResultado->metadados->NRE = $objResultado->metadados->nre; + $objResultado->metadados->processo->documento = $arrObjMetaDocumento[0]; + $objResultado->metadados->processo->interessado = $arrObjMetaInteressado; + + return $objResultado; + } catch (\Exception $e) { $mensagem = "Falha na solicitação de metadados do processo"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1189,7 +1256,7 @@ public static function obterIdTarefaModulo($strIdTarefaModulo) public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrStaTipoTramite, $parDthRegistroTramite, $parNumIdRepositorioOrigem, $parNumIdEstruturaOrigem, $parNumIdRepositorioDestino, $parNumIdEstruturaDestino, $parObjProtocolo, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null, $bolSinProcessamentoEmBloco = false, $numIdUnidade = null) { - + // $parObjProtocolo if(!isset($parDblIdProcedimento) || $parDblIdProcedimento == 0) { throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); } @@ -1226,6 +1293,10 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR throw new InfraException('Parâmetro $objProcesso não informado.'); } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } + //Monta dados do processo eletrônico $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); $objProcessoEletronicoDTO->setStrNumeroRegistro($parStrNumeroRegistro); @@ -1233,20 +1304,20 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR $objProcessoEletronicoDTO->setStrStaTipoProtocolo($parObjProtocolo->staTipoProtocolo); //Montar dados dos procedimentos apensados - if(isset($parObjProtocolo->processoApensado)){ - if(!is_array($parObjProtocolo->processoApensado)){ - $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); - } + if (isset($parObjProtocolo->processoApensado)) { + if (!is_array($parObjProtocolo->processoApensado)) { + $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); + } $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; - foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { - $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); - $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado->idProcedimentoSEI); - $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado->protocolo); - $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; - } + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { + $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); + $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); + $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); + $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); + $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; + } $objProcessoEletronicoDTO->setArrObjRelProcessoEletronicoApensado($arrObjRelProcessoEletronicoApensadoDTO); } @@ -1385,7 +1456,7 @@ public static function getHashFromMetaDados($objMeta) $strHashConteudo = $objMeta; } else { $matches = array(); - $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->_; + $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta['conteudo']; if (preg_match('/^(.*)<\/hash>$/', $strHashConteudo, $matches, PREG_OFFSET_CAPTURE)) { $strHashConteudo = $matches[1][0]; @@ -1396,6 +1467,19 @@ public static function getHashFromMetaDados($objMeta) return $strHashConteudo; } + public static function getHashFromMetaDadosREST($objMeta) + { + $strHashConteudo = ''; + if (isset($objMeta)) { + if(is_string($objMeta)){ + $strHashConteudo = $objMeta; + } else { + $strHashConteudo = (isset($objMeta['conteudo'])) ? $objMeta['conteudo'] : $objMetaconteudo; + } + } + return $strHashConteudo; + } + private function montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados) { $arrayComponentesDigitais = $objDocumento->componenteDigital; @@ -1465,7 +1549,7 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $arrObjComponenteDigitalDTOAux = array(); foreach ($arrObjDocumento as $objDocumento) { - $quantidadeDeComponentesDigitais = count($objDocumento->componenteDigital); + $quantidadeDeComponentesDigitais = count($objDocumento->componentesDigitais); if($quantidadeDeComponentesDigitais > 1){ $arrObjComponenteDigitalDTOAux = self::montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados); }else{ @@ -1490,16 +1574,17 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden } //Por enquanto, considera que o documento possui apenas um componente digital - if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { + if(is_array($objDocumento->componentesDigitais) && count($objDocumento->componentesDigitais) != 1) { throw new InfraException("Erro processando componentes digitais do processo " . $parObjProtocolo->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); } - $objComponenteDigital = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital[0] : $objDocumento->componenteDigital; - $objComponenteDigitalDTO->setStrNome(mb_convert_encoding($objComponenteDigital->nome, 'ISO-8859-1', 'UTF-8')); + $arrComponenteDigital = is_array($objDocumento->componentesDigitais) ? $objDocumento->componentesDigitais[0] : $objDocumento->componentesDigitais; + $objComponenteDigital = (object) $arrComponenteDigital; + $objComponenteDigitalDTO->setStrNome(utf8_decode($objComponenteDigital->nome)); if(isset($objDocumento->especie)){ - $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie->codigo)); - $objComponenteDigitalDTO->setStrNomeEspecieProdutor(mb_convert_encoding($objDocumento->especie->nomeNoProdutor, 'ISO-8859-1', 'UTF-8')); + $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie['codigo'])); + $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie['nomeNoProdutor'])); } $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); @@ -1507,16 +1592,16 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); - $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); + $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); //Registrar componente digital necessita ser enviado pelo trâmite específico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui if(isset($parObjComponentesDigitaisSolicitados)){ - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); + $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados) ? $parObjComponentesDigitaisSolicitados : array($parObjComponentesDigitaisSolicitados); foreach ($arrObjItensSolicitados as $objItemSolicitado) { if(!is_null($objItemSolicitado)){ - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); + $objItemSolicitado['hashes'] = is_array($objItemSolicitado['hashes']) ? $objItemSolicitado['hashes'] : array($objItemSolicitado['hashes']); - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { + if($objItemSolicitado['protocolo'] == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado['hashes']) && !$objDocumento->retirado) { $objComponenteDigitalDTO->setStrSinEnviar("S"); } } @@ -1526,7 +1611,10 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); + if (isset($objComponenteDigital->idAnexo)) { $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); + } + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; } $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTOAux, $arrObjComponenteDigitalDTO); @@ -1542,10 +1630,43 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden return $arrObjComponenteDigitalDTO; } - public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + + + public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + { + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; + try { + $identificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $parStrHashComponenteDigital, + 'protocolo' => $parStrProtocolo, + ]; + + // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital + if (!is_null($parObjParteComponente)) { + $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; + } + + $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); + + $objResultado = new stdClass(); + $objResultado->conteudoDoComponenteDigital = new stdClass(); + $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); + + return $objResultado; + + } catch (\Exception $e) { + $mensagem = "Falha no recebimento do componente digital"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + } + + public function receberComponenteDigitalS($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) { try - { + { + $parametros = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital = new stdClass(); @@ -1569,45 +1690,52 @@ public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHas } } + public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { + $endpoint = 'tramites'; try { $arrObjTramite = array(); - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->IDT = $parNumIdTramite; + $parametros = [ + 'IDT' => $parNumIdTramite + ]; - if(!is_null($parNumeroRegistro)){ - $parametros->filtroDeConsultaDeTramites->NRE = $parNumeroRegistro; - } + if(!is_null($parNumeroRegistro)){ + $parametros['NRE'] = $parNumeroRegistro; + } - if(!is_null($parNumeroUnidadeRemetente) && !is_null($parNumeroRepositorioEstruturas)){ - $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); - $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; - $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeRemetente; - } + if(!is_null($parNumeroUnidadeRemetente) && !is_null($parNumeroRepositorioEstruturas)){ + $parametros['remetente']['identificacaoDoRepositorioDeEstruturas'] = $parNumeroRepositorioEstruturas; + $parametros['remetente']['numeroDeIdentificacaoDaEstrutura'] = $parNumeroUnidadeRemetente; + } - if(!is_null($parNumeroUnidadeDestino) && !is_null($parNumeroRepositorioEstruturas)){ - $parametros->filtroDeConsultaDeTramites->destinatario = new stdClass(); - $parametros->filtroDeConsultaDeTramites->destinatario->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; - $parametros->filtroDeConsultaDeTramites->destinatario->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeDestino; - } + if(!is_null($parNumeroUnidadeDestino) && !is_null($parNumeroRepositorioEstruturas)){ + $parametros['destinatario']['identificacaoDoRepositorioDeEstruturas'] = $parNumeroRepositorioEstruturas; + $parametros['destinatario']['numeroDeIdentificacaoDaEstrutura'] = $parNumeroUnidadeDestino; + } - if(!is_null($parProtocolo)){ - $parametros->filtroDeConsultaDeTramites->protocolo = $parProtocolo; - } + if (!is_null($parProtocolo)) { + $parametros['protocolo'] = $parProtocolo; + } - $objTramitesEncontrados = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado['tramites']) && !empty($arrResultado['tramites'][0])) { + + $historico = []; + foreach ($arrResultado['tramites'][0]['mudancasDeSituacao'] as $mudancaDeSituacao) { + $historico['operacao'][] = $mudancaDeSituacao; + } + + $arrResultado['tramites'][0] = array_filter($arrResultado['tramites'][0], function($value) { + return !is_null($value); + }); + + $arrObjTramite[] = $this->converterArrayParaObjeto($arrResultado['tramites'][0]); + $arrObjTramite[0]->historico = (object) $historico; - if(isset($objTramitesEncontrados->tramitesEncontrados) && isset($objTramitesEncontrados->tramitesEncontrados->tramite)) { - $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite; - if(!is_array($arrObjTramite)) { - $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite); } - } return $arrObjTramite; @@ -1620,24 +1748,18 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = public function consultarTramitesProtocolo($parProtocoloFormatado) { + $arrObjTramite = array(); try { - $arrObjTramite = array(); - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->protocolo = $parProtocoloFormatado; - - $objTramitesEncontrados = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + $parametros = [ + 'protocolo' => $parProtocoloFormatado + ]; - if(isset($objTramitesEncontrados->tramitesEncontrados)) { + $arrResultado = $this->consultarTramites(null, null, null, null, $parametros['protocolo']); - $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite; - if(!is_array($arrObjTramite)) { - $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite); + if (isset($arrResultado)) { + $arrObjTramite = $arrResultado; } - } return $arrObjTramite; } catch (\Exception $e) { @@ -1649,14 +1771,16 @@ public function consultarTramitesProtocolo($parProtocoloFormatado) public function cienciaRecusa($parNumIdTramite) { + $endpoint = "tramites/{$parNumIdTramite}/ciencia"; try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - //return $this->getObjPenWs()->cienciaRecusa($parametro); - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->cienciaRecusa($parametros); - }); + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; + } catch (\Exception $e) { $mensagem = "Falha no registro de ciência da recusa de trâmite"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1664,7 +1788,7 @@ public function cienciaRecusa($parNumIdTramite) } } - /** + /** * Retorna o estado atual do procedimento no api-pen * * @param integer $dblIdProcedimento @@ -1674,61 +1798,50 @@ public function cienciaRecusa($parNumIdTramite) */ public function consultarEstadoProcedimento($strProtocoloFormatado = '', $numIdRepositorio = null, $numIdEstrutura = null) { - $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); + $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); - $objProtocoloDTO = new ProtocoloDTO(); - $objProtocoloDTO->setStrProtocoloFormatado($strProtocoloFormatado); - $objProtocoloDTO->setNumMaxRegistrosRetorno(1); - $objProtocoloDTO->retDblIdProtocolo(); - $objProtocoloDTO->retStrProtocoloFormatado(); - $objProtocoloDTO->retStrStaEstado(); + $objProtocoloDTO = new ProtocoloDTO(); + $objProtocoloDTO->setStrProtocoloFormatado($strProtocoloFormatado); + $objProtocoloDTO->setNumMaxRegistrosRetorno(1); + $objProtocoloDTO->retDblIdProtocolo(); + $objProtocoloDTO->retStrProtocoloFormatado(); + $objProtocoloDTO->retStrStaEstado(); - $objProtocoloDTO = $objBD->consultar($objProtocoloDTO); + $objProtocoloDTO = $objBD->consultar($objProtocoloDTO); if (empty($objProtocoloDTO)) { throw new InfraException(mb_convert_encoding(sprintf('Nenhum procedimento foi encontrado com o id %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); } if ($objProtocoloDTO->getStrStaEstado() != ProtocoloRn::$TE_PROCEDIMENTO_BLOQUEADO) { - throw new InfraException(mb_convert_encoding('O processo não esta com o estado com "Em Processamento" ou "Bloqueado"', 'UTF-8', 'ISO-8859-1')); + throw new InfraException(mb_convert_encoding('O processo não esta com o estado com "Em Processamento" ou "Bloqueado"', 'UTF-8', 'ISO-8859-1')); } - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->getDblIdProtocolo()); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); if(!$arrObjTramiteDTO){ throw new InfraException('Trâmite não encontrado'); } - $objTramiteDTO = $arrObjTramiteDTO[0]; - - $objFiltro = new stdClass(); - $objFiltro->filtroDeConsultaDeTramites = new stdClass(); - $objFiltro->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); - - $objResultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($objFiltro) { - return $objPenWs->consultarTramites($objFiltro); - }); + $objTramiteDTO = $arrObjTramiteDTO[0]; - $objTramitesEncontrados = $objResultado->tramitesEncontrados; + $arrResultado = $this->consultarTramites($objTramiteDTO->getNumIdTramite()); - if (empty($objTramitesEncontrados) || !isset($objTramitesEncontrados->tramite)) { - throw new InfraException(mb_convert_encoding(sprintf('Nenhum tramite foi encontrado para o procedimento %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); + if (empty($arrResultado) || !isset($arrResultado)) { + throw new InfraException(mb_convert_encoding(sprintf('Nenhum tramite foi encontrado para o procedimento %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); } - if(!is_array($objTramitesEncontrados->tramite)){ - $objTramitesEncontrados->tramite = array($objTramitesEncontrados->tramite); - } - $arrObjTramite = (array) $objTramitesEncontrados->tramite; + $arrObjTramite = (array) $arrResultado; + $objTramite = array_pop($arrObjTramite); - $objTramite = array_pop($arrObjTramite); if (empty($numIdRepositorio)) { $objPenParametroRN = new PenParametroRN(); @@ -1787,6 +1900,7 @@ public function consultarEstadoProcedimento($strProtocoloFormatado = '', $numIdR public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $parStrReciboTramite) { + $endpoint = "tramites/{$parNumIdTramite}/recibo"; try { $strHashAssinatura = null; @@ -1799,15 +1913,12 @@ public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $par openssl_sign($parStrReciboTramite, $strHashAssinatura, $objPrivatekey, 'sha256'); $strHashDaAssinaturaBase64 = base64_encode($strHashAssinatura); - $parametros = new stdClass(); - $parametros->dadosDoReciboDeTramite = new stdClass(); - $parametros->dadosDoReciboDeTramite->IDT = $parNumIdTramite; - $parametros->dadosDoReciboDeTramite->dataDeRecebimento = $parDthRecebimento; - $parametros->dadosDoReciboDeTramite->hashDaAssinatura = $strHashDaAssinaturaBase64; + $envioDeReciboDeTramite = [ + 'dataDeRecebimento' => $parDthRecebimento, + 'hashDaAssinatura' => $strHashDaAssinaturaBase64, + ]; - $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->enviarReciboDeTramite($parametros); - }); + $this->post($endpoint, $envioDeReciboDeTramite); return $strHashDaAssinaturaBase64; @@ -1824,12 +1935,16 @@ public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $par public function receberReciboDeTramite($parNumIdTramite) { - try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberReciboDeTramite($parametros); - }); + $endpoint = "tramites/{$parNumIdTramite}/recibo"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['recibo']['hashDoComponenteDigital'] = $arrResultado['recibo']['hashesDosComponentesDigitais'][0]; + + return $this->converterArrayParaObjeto($arrResultado); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite. ". $this->tratarFalhaWebService($e); @@ -1846,14 +1961,16 @@ public function receberReciboDeTramite($parNumIdTramite) */ public function receberReciboDeEnvio($parNumIdTramite) { - try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - $resultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberReciboDeEnvio($parametros); - }); + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; - return $resultado->conteudoDoReciboDeEnvio; + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['reciboDeEnvio']['hashDoComponenteDigital'] = $arrResultado['reciboDeEnvio']['hashesDosComponentesDigitais'][0]; + + return $this->converterArrayParaObjeto($arrResultado); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite de envio. " . $this->tratarFalhaWebService($e); @@ -1977,17 +2094,18 @@ public function obterIdTarefaSEIMapeado($strCodigoOperacao) * @throws Exception|InfraException * @return null */ + public function cancelarTramite($idTramite) { - $parametros = new stdClass(); - $parametros->IDT = $idTramite; - + $endpoint = "tramites/{$idTramite}"; try{ - $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->cancelarEnvioDeTramite($parametros); - }); - } - catch(\Exception $e) { + $parametros = [ + 'IDT' => $idTramite + ]; + + $this->delete($endpoint, $parametros); + + } catch(\Exception $e) { $mensagem = "Falha no cancelamento de trâmite de processo"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); @@ -2006,16 +2124,15 @@ public function cancelarTramite($idTramite) public function recusarTramite($idTramite, $justificativa, $motivo) { try { + $endpoint = "tramites/{$idTramite}/recusa"; $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - $parametros = new stdClass(); - $parametros->recusaDeTramite = new stdClass(); - $parametros->recusaDeTramite->IDT = $idTramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'); - $parametros->recusaDeTramite->motivo = $motivo; + + $parametros = [ + 'justificativa' => utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000)), + 'motivo' => $motivo + ]; - $resultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->recusarTramite($parametros); - }); + $this->post($endpoint, $parametros); } catch (Exception $e) { $mensagem = "Falha na recusa de trâmite de processo"; @@ -2040,98 +2157,101 @@ public function cadastrarTramitePendente($numIdentificacaoTramite, $idAtividadeE } public function isDisponivelCancelarTramite($strProtocolo = '') - { - //Obtem o id_rh que representa a unidade no barramento - $objPenParametroRN = new PenParametroRN(); - $numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); + { + //Obtem o id_rh que representa a unidade no barramento + $objPenParametroRN = new PenParametroRN(); + $numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); - //Obtem os dados da unidade - $objPenUnidadeDTO = new PenUnidadeDTO(); - $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - $objPenUnidadeDTO->retNumIdUnidadeRH(); + //Obtem os dados da unidade + $objPenUnidadeDTO = new PenUnidadeDTO(); + $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); + $objPenUnidadeDTO->retNumIdUnidadeRH(); - $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); - $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); + $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); + $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); - //Obtem os dados do último trâmite desse processo no barramento - $objProtocoloDTO = new ProtocoloDTO(); - $objProtocoloDTO->setStrProtocoloFormatado($strProtocolo); - $objProtocoloDTO->retDblIdProtocolo(); + //Obtem os dados do último trâmite desse processo no barramento + $objProtocoloDTO = new ProtocoloDTO(); + $objProtocoloDTO->setStrProtocoloFormatado($strProtocolo); + $objProtocoloDTO->retDblIdProtocolo(); - $objProtocoloRN = new ProtocoloRN(); - $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); + $objProtocoloRN = new ProtocoloRN(); + $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - if(!$arrObjTramiteDTO){ - return false; - } + if(!$arrObjTramiteDTO){ + return false; + } - $objTramiteDTO = $arrObjTramiteDTO[0]; + $objTramiteDTO = $arrObjTramiteDTO[0]; - try { - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); - $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); - $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $numIdRespositorio; - $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $objPenUnidadeDTO->getNumIdUnidadeRH(); - - $objMeta = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + try { + $parametros = new stdClass(); + $parametros->filtroDeConsultaDeTramites = new stdClass(); + $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); + $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); + $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $numIdRespositorio; + $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $objPenUnidadeDTO->getNumIdUnidadeRH(); + + $objMeta = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { + return $objPenWs->consultarTramites($parametros); + }); - if($objMeta->tramitesEncontrados) { - $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; - $objMetaTramite = $arrObjMetaTramite[0]; + if($objMeta->tramitesEncontrados) { + $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; + $objMetaTramite = $arrObjMetaTramite[0]; - $strSituacoesDisponíveisCancelamento = array( - static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, - static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO - ); + $strSituacoesDisponíveisCancelamento = array( + static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, + static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO + ); - if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ - return true; - } + if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ + return true; } - - return false; - } - catch(SoapFault $e) { - return false; - } - catch(Exception $e) { - return false; } + + return false; } + catch(SoapFault $e) { + return false; + } + catch(Exception $e) { + return false; + } +} - public function consultarHipotesesLegais($ativos = true) { - try{ - $parametros = new stdClass(); - $parametros->filtroDeHipotesesLegais = new stdClass(); - $parametros->filtroDeHipotesesLegais->ativos = $ativos; + public function consultarHipotesesLegais($ativos = true) + { + $endpoint = "hipoteses"; - $hipoteses = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarHipotesesLegais($parametros); - }); + $parametros = [ + 'ativos' => $ativos + ]; - if (empty($hipoteses)) { - return []; - } - return $hipoteses; + try { + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; - } catch(Exception $e){ - $mensagem = "Falha na obtenção de hipóteses legais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + if (empty($hipoteses)) { + return []; + } + + return $hipoteses; + + } catch(Exception $e){ + $mensagem = "Falha na obtenção de hipóteses legais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } protected function contarConectado(ProcessoEletronicoDTO $objProcessoEletronicoDTO) @@ -2197,17 +2317,19 @@ public static function comparacaoOrdemComponenteDigitais($parComponenteDigital1, public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrairAnexados = false) { $arrObjDocumento = array(); - if(isset($parObjProtocolo->documento)){ - $arrObjProtocolo = is_array($parObjProtocolo->documento) ? $parObjProtocolo->documento : array($parObjProtocolo->documento); + if(isset($parObjProtocolo->documentos)){ + $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : json_decode(json_encode($parObjProtocolo->documentos), true); usort($arrObjProtocolo, array("ProcessoEletronicoRN", "comparacaoOrdemAjustadaDocumentos")); //Tratamento recursivo para processos anexados foreach ($arrObjProtocolo as $objProtocolo) { + $objProtocolo = (object) $objProtocolo; $bolEhProcessoAnexado = $objProtocolo->staTipoProtocolo == ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; if($parBolExtrairAnexados && $bolEhProcessoAnexado){ $arrProtocolosAnexados = ProcessoEletronicoRN::obterDocumentosProtocolo($objProtocolo, $parBolExtrairAnexados); $arrObjDocumento = array_merge($arrObjDocumento, $arrProtocolosAnexados); } else { + if(!$bolEhProcessoAnexado){ $objProtocolo->idProcedimentoSEI = $parObjProtocolo->idProcedimentoSEI; } @@ -2220,7 +2342,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair //Quando se tratar de um Documento Avulso, a ordem será sempre 1 $parObjProtocolo->ordem = 1; $parObjProtocolo->ordemAjustada = 1; - $parObjProtocolo->componenteDigital = self::obterComponentesDocumentos($parObjProtocolo); + $parObjProtocolo->componentesDigitais = self::obterComponentesDocumentos($parObjProtocolo); return array($parObjProtocolo); } @@ -2230,27 +2352,33 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $objDocumento) { - $objDocumento->componenteDigital = self::obterComponentesDocumentos($objDocumento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); + } else { + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } } return $arrObjDocumentoPadronizados; } - public static function obterComponentesDocumentos($parObjDocumento) - { - $arrObjComponenteDigital=array(); - if(isset($parObjDocumento->componenteDigital)){ - - $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } - - - return $arrObjComponenteDigital; + public static function obterComponentesDocumentos($parObjDocumento) + { + + if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { + return $parObjDocumento['componentesDigitais']; + } + + $arrObjComponenteDigital = array(); + if (isset($parObjDocumento->componentesDigitais)) { + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } - } + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2305,9 +2433,9 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if(isset($parObjDocumento->componenteDigital)){ - $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); - } + if (isset($parObjDocumento['componentesDigitais'])) { + $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + } return $arrObjComponenteDigital; } @@ -2326,17 +2454,21 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } + if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ - return $parObjProtocolo; + return $parObjProtocolo; } - $arrObjRefProcessosAnexados = array(); - $objProcessoPrincipal = clone $parObjProtocolo; - $objProcessoPrincipal->documento = array(); - $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); - usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); + $arrObjRefProcessosAnexados = array(); + $objProcessoPrincipal = clone $parObjProtocolo; + $objProcessoPrincipal->documento = array(); + $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); + usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); - // Agrupamento dos documentos por processo + // Agrupamento dos documentos por processo foreach ($arrObjDocumentosOrdenados as $objDocumento) { $bolDocumentoAnexado = ProcessoEletronicoRN::documentoFoiAnexado($parObjProtocolo, $objDocumento); $strProtocoloProcAnexado = ($bolDocumentoAnexado) ? $objDocumento->protocoloDoProcessoAnexado : $objProcessoPrincipal->protocolo; @@ -2359,7 +2491,7 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) $objProcessoDoDocumento->documento[] = $objDocumentoReposicionado; } - return $objProcessoPrincipal; + return $objProcessoPrincipal; } /** @@ -2419,7 +2551,7 @@ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) return ( isset($parObjDocumento->protocoloDoProcessoAnexado) && !empty($parObjDocumento->protocoloDoProcessoAnexado) && - $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado + $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado ); } @@ -2590,4 +2722,87 @@ public function listarAssociacoesDocumentos($idProcedimento) } return $arrIdDocumentos; } -} + + /** + * Converter arrays associativo para objetos + */ + public static function converterArrayParaObjeto($array) + { + if (is_array($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = self::converterArrayParaObjeto($value); + } + return $object; + } + + return $array; + } + + /** + * Consulta as estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura O ID do repositório de estruturas. + * @param array $parametros Parâmetros adicionais para a consulta. + * @throws InfraException Falha na obtenção de unidades externas. + * @return array + */ + public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais"; + try { + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + } + + /** + * Iniciar requisição HTTP utilizado para comunicação Webservice REST + * + */ + private function getArrPenWsRest($method, $endpoint, $options = []) + { + try { + $arrResultado = $this->strClientGuzzle->request($method, $endpoint, $options); + $base64 = $arrResultado->getBody()->getContents(); + + $foo = json_decode($arrResultado->getBody(), true); + if ($foo != null) { + return $foo; + } + + return $base64; + } catch (RequestException $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + + // Lança uma nova exceção com os detalhes do RequestException + throw new Exception(json_encode([ + 'error' => true, + 'codigoErro' => $erroResposta->codigoErro, + 'message' => $erroResposta->mensagem, + 'exception' => $e->getMessage(), + 'details' => $e->hasResponse() ? (string) $e->getResponse()->getBody() : 'No response body' + ])); + } + } + + private function get($endpoint, $params = []) { + return $this->getArrPenWsRest('GET', $endpoint, ['query' => $params]); + } + + private function post($endpoint, $data = []) { + return $this->getArrPenWsRest('POST', $endpoint, ['json' => $data]); + } + + private function put($endpoint, $data = []) { + return $this->getArrPenWsRest('PUT', $endpoint, ['json' => $data]); + } + + private function delete($endpoint, $params = []) { + return $this->getArrPenWsRest('DELETE', $endpoint, ['query' => $params]); + } +} \ No newline at end of file From 279bb27bb3acb652f0041daa150965248d2301a1 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 14 Nov 2024 08:34:38 -0300 Subject: [PATCH 07/18] =?UTF-8?q?refactor:=20m=C3=A9todos=20de=20integra?= =?UTF-8?q?=C3=A7=C3=A3o=20para=20recebimento=20de=20arquivos=20e=20gera?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20recibos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/EnviarReciboTramiteRN.php | 4 +- src/rn/ReceberComponenteDigitalRN.php | 129 +++++++++++++------------- src/rn/ReceberProcedimentoRN.php | 114 ++++++++++++----------- src/rn/ReceberReciboTramiteRN.php | 4 +- 4 files changed, 127 insertions(+), 124 deletions(-) diff --git a/src/rn/EnviarReciboTramiteRN.php b/src/rn/EnviarReciboTramiteRN.php index 29a8efcd4..1e927ca56 100755 --- a/src/rn/EnviarReciboTramiteRN.php +++ b/src/rn/EnviarReciboTramiteRN.php @@ -157,8 +157,8 @@ private function obterDataRecebimentoComponentesDigitais($parObjTramite){ } foreach ($parObjTramite->historico->operacao as $operacao) { - if($operacao->situacao == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { - return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora); + if($operacao['situacao'] == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { + return ProcessoEletronicoRN::converterDataSEI($operacao['dataHora']); } } diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index def90b2c0..0089a9105 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -150,62 +150,62 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT $contDocumentosDto = 0; $arrayRetornoObjAnexoDTO = array(); - foreach ($arrObjDocumentoDTO as $objDocumentoDTO){ - $contDocumentosDto++; - $objAnexoRN = new AnexoRN(); - - $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); - $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); - $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; - - $zipFile= new ZipArchive(); - $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); - - $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); - $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; - $numSequencial = 0; - foreach($arrIdDocumentos as $dblIdDocumento){ - $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; - $strDocumento = ''; - if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ - $arrayAnexosExcluirFisicamente = array(); - foreach ($parArrAnexoDTO as $objAnexoDTO){ - $numSequencial++; - - if ($objAnexoDTO==null){ - $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); - }else{ - /** - * Aqui será atribuído um nome aos anexos - */ - $ext = explode('.', $objAnexoDTO->getStrNome()); - /** - * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. - */ - $ext = strtolower($ext[count($ext)-1]); - $strNomeArquivo = $objAnexoDTO->getStrNome(); - - /** - * Aqui, o anexo será adicionado ao zip - */ - $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; - //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - throw new InfraException('Erro adicionando arquivo externo ao zip.'); - } - else{ - /** - * Aqui quer dizer que o arquivo já foi colocado dentro do zip. - * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. - */ - array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); - } - } - } - }else{ - $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); - } - } + foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { + $contDocumentosDto++; + $objAnexoRN = new AnexoRN(); + + $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); + $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); + $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; + + $zipFile= new ZipArchive(); + $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); + + $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); + $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; + $numSequencial = 0; + foreach($arrIdDocumentos as $dblIdDocumento){ + $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; + $strDocumento = ''; + if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ + $arrayAnexosExcluirFisicamente = array(); + foreach ($parArrAnexoDTO as $objAnexoDTO){ + $numSequencial++; + + if ($objAnexoDTO==null){ + $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); + }else{ + /** + * Aqui será atribuído um nome aos anexos + */ + $ext = explode('.', $objAnexoDTO->getStrNome()); + /** + * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. + */ + $ext = strtolower($ext[count($ext)-1]); + $strNomeArquivo = $objAnexoDTO->getStrNome(); + + /** + * Aqui, o anexo será adicionado ao zip + */ + $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; + //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + throw new InfraException('Erro adicionando arquivo externo ao zip.'); + } + else{ + /** + * Aqui quer dizer que o arquivo já foi colocado dentro do zip. + * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. + */ + array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); + } + } + } + }else{ + $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); + } + } $objInfraException->lancarValidacoes(); if ($zipFile->close() === false) { throw new InfraException('Não foi possível fechar arquivo zip.'); @@ -243,6 +243,7 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, $objComponenteDigitalDTO->setStrNumeroRegistro($parObjComponenteDigitalDTO->getStrNumeroRegistro()); $objComponenteDigitalDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento()); $objComponenteDigitalDTO->setDblIdProcedimento($parObjComponenteDigitalDTO->getDblIdProcedimento()); + //$objComponenteDigitalDTO->setNumOrdem($parObjComponenteDigitalDTO->getNumOrdem()); $objComponenteDigitalDTO->setNumIdAnexo($parObjAnexoDTO->getNumIdAnexo()); $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); $objComponenteDigitalDTO = $objComponenteDigitalBD->alterar($objComponenteDigitalDTO); @@ -253,11 +254,11 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, * @return AnexoDTO * */ - public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $parObjConteudo) - { - if(!isset($parObjComponenteDigital)){ - throw new InfraException("Componente Digital não informado"); - } + public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) + { + if (!isset($parArrComponenteDigital)) { + throw new InfraException("Componente Digital não informado"); + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; @@ -272,12 +273,12 @@ public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $objAnexoDTO->setDthInclusao(InfraData::getStrDataHoraAtual()); $objAnexoDTO->setNumTamanho(filesize(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload)); $objAnexoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAnexoDTO->setStrNome($parObjComponenteDigital->nome); + $objAnexoDTO->setStrNome($parArrComponenteDigital['nome']); return $objAnexoDTO; } public function validarIntegridadeDoComponenteDigital(AnexoDTO $objAnexoDTO, $strHashConteudo, $parNumIdentificacaoTramite, $parNumOrdemComponente) - { + { $strHashInformado = $strHashConteudo; $strHashInformado = base64_decode($strHashInformado); @@ -373,4 +374,4 @@ public function cadastrarAnexoDoDocumento(AnexoDTO $parObjAnexoDTO) $objDocumentoRN->alterarRN0004($objDocumentoDTO); } -} +} \ No newline at end of file diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index effb562f4..0e5a0692f 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -645,14 +645,14 @@ private function listarHashDosComponentesMetadado($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach($arrObjDocumento as $objDocumento){ //Desconsidera os componendes digitais de documentos cancelados - if(!isset($objDocumento->retirado) || $objDocumento->retirado == false) { - if(!isset($objDocumento->componenteDigital)){ - throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado."); + if(!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { + if(!isset($objDocumento['componentesDigitais'])){ + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento['ordem']} não informado."); } - $arrObjComponentesDigitais = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital); + $arrObjComponentesDigitais = is_array($objDocumento['componentesDigitais']) ? $objDocumento['componentesDigitais'] : array($objDocumento['componentesDigitais']); foreach ($arrObjComponentesDigitais as $objComponenteDigital) { - $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital['hash']); } } } @@ -720,23 +720,23 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); $objPenRelTipoDocMapEnviadoDTO->retTodos(); - $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument->especie->codigo); + $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument['especie']['codigo']); - $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD($this->getObjInfraIBanco()); + $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD(BancoSEI::getInstance()); $numContador = (int)$objProcessoEletronicoDB->contar($objPenRelTipoDocMapEnviadoDTO); // Não achou, ou seja, não esta cadastrado na tabela, então não é aceito nesta unidade como válido if($numContador <= 0) { - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', mb_convert_encoding($objDocument->especie->nomeNoProdutor, 'ISO-8859-1', 'UTF-8')), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); - throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument['especie']['nomeNoProdutor'])), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); + throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument['especie']['nomeNoProdutor'], ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); } } } //Não valida informações do componente digital caso o documento esteja cancelado foreach ($arrObjDocumentos as $objDocumento) { - if (!isset($objDocumento->retirado) || $objDocumento->retirado === false) { - foreach ($objDocumento->componenteDigital as $objComponenteDigital) { + if (!isset($objDocument['retirado']) || $objDocumento['retirado'] === false) { + foreach ($objDocumento['componentesDigitais'] as $objComponenteDigital) { $this->validaTamanhoComponenteDigital($objComponenteDigital); } } @@ -745,7 +745,7 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ + if (is_null($objComponenteDigital['tamanhoEmBytes']) || $objComponenteDigital['tamanhoEmBytes'] == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } @@ -945,11 +945,11 @@ private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProce } catch (Exception $e){ $this->gravarLogDebug("Processo $parDblIdProcedimento não pode ser desbloqueado", 2); } - + $numUnidadeReceptora = ModPenUtilsRN::obterUnidadeRecebimento(); $this->enviarProcedimentoUnidade($objProcedimentoDTO, $numUnidadeReceptora); - } finally { + } finally { $numUnidadeReceptora = ModPenUtilsRN::obterUnidadeRecebimento(); SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora); } @@ -1665,7 +1665,12 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $count = count($arrObjDocumentos); $this->gravarLogDebug("Quantidade de documentos para recebimento: $count", 2); - foreach($arrObjDocumentos as $objDocumento){ + foreach($arrObjDocumentos as $objDocumento) { + + if (is_array($objDocumento)) { + $objDocumento = (object) $objDocumento; + } + if(!isset($objDocumento->staTipoProtocolo) || $bolDocumentoAvulso) { // Definição da ordem do documento para avaliação do posicionamento @@ -1709,7 +1714,7 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objSerieDTO = $this->obterSerieMapeada($objDocumento); if ($objSerieDTO==null){ - throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie->codigo.'] não encontrado.'); + throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie['codigo'].'] não encontrado.'); } if (InfraString::isBolVazia($objDocumento->dataHoraDeProducao)) { @@ -2274,7 +2279,7 @@ private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) private function obterSerieMapeada($documento) { $bolPossuiDocumentoReferenciado = isset($documento->ordemDoDocumentoReferenciado); - $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie->codigo) : self::NUM_ESPECIE_PEN_ANEXO; + $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie['codigo']) : self::NUM_ESPECIE_PEN_ANEXO; return $this->objPenRelTipoDocMapRecebidoRN->obterSerieMapeada($numCodigoEspecie); } @@ -2518,15 +2523,12 @@ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtoco $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); foreach($arrDocumentos as $objDocumento){ - if(!isset($objDocumento->retirado) || $objDocumento->retirado == false){ - $arrComponentesDigitais = $objDocumento->componenteDigital; - if(isset($arrComponentesDigitais) && !is_array($arrComponentesDigitais)){ - $arrComponentesDigitais = array($arrComponentesDigitais); - } + if (!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { + $arrComponentesDigitais = $objDocumento['componentesDigitais']; foreach ($arrComponentesDigitais as $componenteDigital) { //Busca o nome do documento - $nomeDocumento = $componenteDigital->nome; + $nomeDocumento = $componenteDigital['nome']; //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); @@ -2633,23 +2635,23 @@ private function documentosPendenteRegistro($parNumIdProcedimento, $parNumIdDocu * @param $parComponentePendente * @return $tamanhoComponentePendende */ - private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) - { - //Obtém os documentos do protocolo em um array - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - - //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente - foreach ($arrObjDocumentos as $objDocumento){ - $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $objComponentesDigital){ - if(ProcessoEletronicoRN::getHashFromMetaDados($objComponentesDigital->hash) == $parComponentePendente){ - $tamanhoComponentePendende = $objComponentesDigital->tamanhoEmBytes; - break; - } - } - } - return $tamanhoComponentePendende; - } + private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) + { + //Obtém os documentos do protocolo em um array + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + + //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente + foreach ($arrObjDocumentos as $objDocumento) { + $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); + foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { + if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { + $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + break; + } + } + } + return $tamanhoComponentePendende; + } /** @@ -2712,21 +2714,21 @@ private function receberComponenenteDigitalParticionado($componentePendente, $nr } - private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) - { - $resultado = array(); - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - foreach($arrObjDocumentos as $objDocumento){ - if(isset($objDocumento->componenteDigital) && !is_array($objDocumento->componenteDigital)){ - $objDocumento->componenteDigital = array($objDocumento->componenteDigital); - } - foreach($objDocumento->componenteDigital as $objComponente){ - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); - $resultado[$strHash] = $objComponente; - } - } - return $resultado; - } + private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) + { + $resultado = array(); + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + foreach ($arrObjDocumentos as $arrDocumento) { + if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ + $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + } + foreach ($arrDocumento['componentesDigitais'] as $objComponente) { + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + $resultado[$strHash] = $objComponente; + } + } + return $resultado; + } /** @@ -2950,4 +2952,4 @@ private function atribuirTipoProcedimentoRelacinado($numIdTipoProcedimento, $num $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); } -} +} \ No newline at end of file diff --git a/src/rn/ReceberReciboTramiteRN.php b/src/rn/ReceberReciboTramiteRN.php index 2d12b8d9d..242fc1a04 100755 --- a/src/rn/ReceberReciboTramiteRN.php +++ b/src/rn/ReceberReciboTramiteRN.php @@ -37,7 +37,7 @@ public function receberReciboDeTramite($parNumIdTramite) throw new InfraException("Não foi possível obter recibo de conclusão do trâmite '$parNumIdTramite'"); } - $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; + // $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; // Inicialização do recebimento do processo, abrindo nova transação e controle de concorrência, // evitando processamento simultâneo de cadastramento do mesmo processo @@ -227,7 +227,7 @@ private function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFor if (isset($objEstrutura->hierarquia)) { - $arrObjNivel = $objEstrutura->hierarquia->nivel; + $arrObjNivel = $objEstrutura->hierarquia; $nome = ""; $siglasUnidades = array(); From 0ecaa4384165ac914df82f6dc95ba05f49ed2f41 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 21 Nov 2024 08:15:08 -0300 Subject: [PATCH 08/18] =?UTF-8?q?fix:=20mudar=20estrutura=20para=20se=20ad?= =?UTF-8?q?aptar=20a=20mudan=C3=A7a=20na=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pen_map_unidade_cadastrar.php | 6 +- src/rn/ProcessoEletronicoRN.php | 139 ++++++++++++++++++++++-------- src/rn/ReceberProcedimentoRN.php | 12 ++- src/rn/ReceberReciboTramiteRN.php | 1 - 4 files changed, 114 insertions(+), 44 deletions(-) diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index d76163131..f129f6ec8 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -104,10 +104,10 @@ $objInfraException->lancarValidacao('A unidade ' . $mapIdUnidade[$objResultado[0]->getNumIdUnidade()] .' do sistema já está mapeada com a unidade '.$_POST['txtUnidadePen'].' do Portal de Administração.'); } // CARREGAR NOME E SIGLA DA ESTRUTURA $objProcessoEletronico = new ProcessoEletronicoRN(); - $objProcessoEletronicoDTO = $objProcessoEletronico->listarEstruturas($numIdRepositorioOrigem, $_POST['id_unidade_rh']); + $objProcessoEletronicoDTO = $objProcessoEletronico->buscarEstrutura($numIdRepositorioOrigem, $_POST['id_unidade_rh']); - $nomeUnidadeRH = $objProcessoEletronicoDTO[0]->getStrNome(); - $siglaUnidadeRH = $objProcessoEletronicoDTO[0]->getStrSigla(); + $nomeUnidadeRH = $objProcessoEletronicoDTO->getStrNome(); + $siglaUnidadeRH = $objProcessoEletronicoDTO->getStrSigla(); $objPenUnidadeDTO = new PenUnidadeDTO(); $objPenUnidadeDTO->setNumIdUnidade($_POST['id_unidade']); $objPenUnidadeDTO->setNumIdUnidadeRH($_POST['id_unidade_rh']); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 6f90bac27..4c5d4a538 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -402,6 +402,71 @@ public function listarEstruturas( return $arrObjEstruturaDTO; } + + /** + * Lista estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura ID do repositório de estruturas. + * @param string $nome + * @param int $numeroDeIdentificacaoDaEstruturaRaizDaConsulta + * @param string $nomeUnidade + * @param string $siglaUnidade + * @param int $offset Offset + * @param int $registrosPorPagina + * @param bool $parBolPermiteRecebimento + * @param bool $parBolPermiteEnvio + * @throws InfraException + * @return EstruturaDTO + */ + public function buscarEstrutura( + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null +) { + $arrObjEstruturaDTO = []; +try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } + + $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; + + $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); + + if ($estrutura !== null) { + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + return $objEstruturaDTO; + } + + return null; +} catch (Exception $e) { + throw new InfraException("Falha na obtenção de unidades externas"); +} + + return $arrObjEstruturaDTO; +} + /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas * @@ -1662,35 +1727,6 @@ public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHas } } - public function receberComponenteDigitalS($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) - { - try - { - - $parametros = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->IDT = $parNumIdentificacaoTramite; - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->protocolo = $parStrProtocolo; - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->hashDoComponenteDigital = $parStrHashComponenteDigital; - - //Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital - if(!is_null($parObjParteComponente)){ - $parametros->parametrosParaRecebimentoDeComponenteDigital->parte = $parObjParteComponente; - } - - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberComponenteDigital($parametros); - }); - } catch (\SoapFault $fault) { - $mensagem = $this->tratarFalhaWebService($fault); - throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault); - } catch (\Exception $e) { - throw new InfraException("Error Processing Request", $e); - } - } - - public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { $endpoint = 'tramites'; @@ -2478,17 +2514,17 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) // existe apenas o número do protocolo de referência if($bolDocumentoAnexado && !array_key_exists($strProtocoloProcAnexado, $arrObjRefProcessosAnexados)){ $objProcessoAnexado = clone $objProcessoPrincipal; - $objProcessoAnexado->documento = array(); + $objProcessoAnexado->documentos = array(); $objProcessoAnexado->protocolo = $strProtocoloProcAnexado; - $objProcessoAnexado->ordemAjustada = count($objProcessoPrincipal->documento) + 1; - $objProcessoPrincipal->documento[] = $objProcessoAnexado; + $objProcessoAnexado->ordemAjustada = count($objProcessoPrincipal->documentos) + 1; + $objProcessoPrincipal->documentos[] = $objProcessoAnexado; $arrObjRefProcessosAnexados[$strProtocoloProcAnexado] = $objProcessoAnexado; } $objProcessoDoDocumento = ($bolDocumentoAnexado) ? $arrObjRefProcessosAnexados[$strProtocoloProcAnexado] : $objProcessoPrincipal; $objDocumentoReposicionado = clone $objDocumento; - $objDocumentoReposicionado->ordemAjustada = count($objProcessoDoDocumento->documento) + 1; - $objProcessoDoDocumento->documento[] = $objDocumentoReposicionado; + $objDocumentoReposicionado->ordemAjustada = count($objProcessoDoDocumento->documentos) + 1; + $objProcessoDoDocumento->documentos[] = $objDocumentoReposicionado; } return $objProcessoPrincipal; @@ -2548,11 +2584,16 @@ public static function obterTamanhoBlocoTransferencia(){ */ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) { + return ( - isset($parObjDocumento->protocoloDoProcessoAnexado) && - !empty($parObjDocumento->protocoloDoProcessoAnexado) && - $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado - ); + isset($parObjDocumento->protocoloDoProcessoAnexado) && + !empty($parObjDocumento->protocoloDoProcessoAnexado) && + ( + is_array($parObjProtocolo) + ? $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado + : (is_object($parObjProtocolo) && $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado) + ) + ); } /** @@ -2760,6 +2801,28 @@ public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) } } + /** + * Consulta as estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura O ID do repositório de estruturas. + * @param array $parametros Parâmetros adicionais para a consulta. + * @throws InfraException Falha na obtenção de unidades externas. + * @return array + */ + public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; + try { + $arrResultado = $this->get($endpoint); + return $arrResultado; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + LogSEI::getInstance()->gravar($detalhes, InfraLog::$ERRO); + throw new InfraException($mensagem, $e, $mensagem); + } + } + /** * Iniciar requisição HTTP utilizado para comunicação Webservice REST * diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 0e5a0692f..200a2715f 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1842,10 +1842,17 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->getObjProtocoloDTO()->setNumIdUnidadeGeradora(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objDocumentoDTO->setStrSinBloqueado('N'); + + if (isset($objDocumento->componenteDigital)) { + $componentesDigitais = $objDocumento->componenteDigital; + } else { + $componentesDigitais[] = $objDocumento->componentesDigitais; + } + //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, - $objDocumento->componenteDigital, + $componentesDigitais, $arrDocumentosExistentesPorHash, $parObjMetadadosProcedimento->arrHashComponenteBaixados); @@ -1921,6 +1928,7 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { + $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); $bolComponenteDigitalExistente = array_key_exists($strHashComponenteDigital, $arrDocumentosExistentesPorHash); @@ -2061,7 +2069,7 @@ private function atribuirComponentesDigitais(DocumentoDTO $objDocumentoDTO, $par // Atribui componentes digitais já presentes no processo e não reenviados pelo Tramita.gov.br $arrAnexo = array(); $arrAnexo = $this->atribuirComponentesJaExistentesNoProcesso( - $parObjDocumentoDTO, + $objDocumentoDTO, $parArrObjComponentesDigitais, $arrDocumentosExistentesPorHash, $arrHashComponenteBaixados diff --git a/src/rn/ReceberReciboTramiteRN.php b/src/rn/ReceberReciboTramiteRN.php index 242fc1a04..a1faae3c5 100755 --- a/src/rn/ReceberReciboTramiteRN.php +++ b/src/rn/ReceberReciboTramiteRN.php @@ -37,7 +37,6 @@ public function receberReciboDeTramite($parNumIdTramite) throw new InfraException("Não foi possível obter recibo de conclusão do trâmite '$parNumIdTramite'"); } - // $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; // Inicialização do recebimento do processo, abrindo nova transação e controle de concorrência, // evitando processamento simultâneo de cadastramento do mesmo processo From 8697578cd46a208da86d2488ec9ec7a92a6e75f5 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 21 Nov 2024 11:17:17 -0300 Subject: [PATCH 09/18] =?UTF-8?q?chore:=20corre=C3=A7=C3=B5es=20phpcs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 30 +- src/rn/ProcessoEletronicoRN.php | 696 +++++++++++++------------- src/rn/ReceberComponenteDigitalRN.php | 122 ++--- src/rn/ReceberProcedimentoRN.php | 70 +-- 4 files changed, 459 insertions(+), 459 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index a870858e6..c949b6e83 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -245,14 +245,14 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe try { $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Envio do metadados do processo', 'S')); - if($bolSinProcessamentoEmBloco){ - $this->gravarLogDebug(sprintf('Envio do metadados do processo %s', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); - $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO); - $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); - $idAtividadeExpedicao = $numIdAtividade; - }else{ + if($bolSinProcessamentoEmBloco){ + $this->gravarLogDebug(sprintf('Envio do metadados do processo %s', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); + $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO); + $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); + $idAtividadeExpedicao = $numIdAtividade; + }else{ $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $arrProcesso['idProcedimentoSEI']); - } + } $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( $arrProcesso['idProcedimentoSEI'], @@ -292,14 +292,14 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe //TODO: Alterar atualizao para somente apresentar ao final de todo o trâmite //$this->barraProgresso->mover(ProcessoEletronicoINT::NEE_EXPEDICAO_ETAPA_CONCLUSAO); - if(!$bolSinProcessamentoEmBloco){ - $this->barraProgresso->mover($this->barraProgresso->getNumMax()); - $this->barraProgresso->setStrRotulo(ProcessoEletronicoINT::TEE_EXPEDICAO_ETAPA_CONCLUSAO); - }else{ - $this->gravarLogDebug('Concluído envio dos componentes do processo', 2); - $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE); - $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); - } + if(!$bolSinProcessamentoEmBloco){ + $this->barraProgresso->mover($this->barraProgresso->getNumMax()); + $this->barraProgresso->setStrRotulo(ProcessoEletronicoINT::TEE_EXPEDICAO_ETAPA_CONCLUSAO); + }else{ + $this->gravarLogDebug('Concluído envio dos componentes do processo', 2); + $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE); + $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); + } $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'S')); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 4c5d4a538..0db9f0fbf 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -180,67 +180,67 @@ private function getObjPenWs() * * @param int $numIdentificacaoDoRepositorioDeEstruturas Código de identificação do repositório de estruturas do PEN */ - public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) - { - $objRepositorioDTO = null; - $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; - try { - $parametros = [ - 'ativo' => true - ]; - $arrResultado = $this->get($endpoint, $parametros); - - if (isset($arrResultado)) { - foreach ($arrResultado as $repositorio) { - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio['id']); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio['ativo']); - } - } - } catch (Exception $e) { - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $objRepositorioDTO; - } + public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) + { + $objRepositorioDTO = null; + $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + try { + $parametros = [ + 'ativo' => true + ]; + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $objRepositorioDTO; + } /** * Lista todo os repositórios de estruturas disponíveis no Barramento de Serviços do PEN * * @return void */ - public function listarRepositoriosDeEstruturas() - { - $arrObjRepositorioDTO = []; - $endpoint = 'repositorios-de-estruturas'; - - try { - $parametros = [ - 'ativos' => true - ]; - - $arrResultado = $this->get($endpoint, $parametros); - - if (isset($arrResultado)) { - foreach ($arrResultado as $repositorio) { - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio['id']); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio['ativo']); - $arrObjRepositorioDTO[] = $objRepositorioDTO; - } - } - } catch(Exception $e) { - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjRepositorioDTO; - } + public function listarRepositoriosDeEstruturas() + { + $arrObjRepositorioDTO = []; + $endpoint = 'repositorios-de-estruturas'; + + try { + $parametros = [ + 'ativos' => true + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + $arrObjRepositorioDTO[] = $objRepositorioDTO; + } + } + } catch(Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjRepositorioDTO; + } /** * Método responsável por consultar as estruturas das unidades externas no barramento. * @@ -295,7 +295,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac * @return array * @throws InfraException */ - public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) + public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) { try { $estruturasUnidades = null; @@ -340,7 +340,7 @@ public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $num * @throws InfraException * @return EstruturaDTO */ - public function listarEstruturas( + public function listarEstruturas( $idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, @@ -351,7 +351,7 @@ public function listarEstruturas( $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null ) { - $arrObjEstruturaDTO = []; + $arrObjEstruturaDTO = []; try { $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { @@ -399,7 +399,7 @@ public function listarEstruturas( throw new InfraException($mensagem, $e, $detalhes); } - return $arrObjEstruturaDTO; + return $arrObjEstruturaDTO; } @@ -418,7 +418,7 @@ public function listarEstruturas( * @throws InfraException * @return EstruturaDTO */ - public function buscarEstrutura( + public function buscarEstrutura( $idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, @@ -428,44 +428,44 @@ public function buscarEstrutura( $registrosPorPagina = null, $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null -) { - $arrObjEstruturaDTO = []; -try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); - if (!$idRepositorioEstrutura) { - throw new InfraException('Repositório de Estruturas inválido'); - } - - $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; + ) { + $arrObjEstruturaDTO = []; + try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } - $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); + $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; - if ($estrutura !== null) { + $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); - $objEstruturaDTO = new EstruturaDTO(); - $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); - $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); - $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); - $objEstruturaDTO->setBolAtivo($estrutura['ativo']); - $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); - $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + if ($estrutura !== null) { - $arrHerarquia = array_map(function ($nivel) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + + $arrHerarquia = array_map(function ($nivel) { return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); - }, $estrutura['hierarquia'] ?: []); + }, $estrutura['hierarquia'] ?: []); - $objEstruturaDTO->setArrHierarquia($arrHerarquia); + $objEstruturaDTO->setArrHierarquia($arrHerarquia); - return $objEstruturaDTO; - } + return $objEstruturaDTO; + } - return null; -} catch (Exception $e) { - throw new InfraException("Falha na obtenção de unidades externas"); -} + return null; + } catch (Exception $e) { + throw new InfraException("Falha na obtenção de unidades externas"); + } - return $arrObjEstruturaDTO; -} + return $arrObjEstruturaDTO; + } /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas @@ -742,30 +742,30 @@ public function listarEstruturasAutoCompletar( } - public function consultarMotivosUrgencia() + public function consultarMotivosUrgencia() { - $endpoint = 'motivosUrgencia'; - try { - $parametros = []; + $endpoint = 'motivosUrgencia'; + try { + $parametros = []; - $arrResultado = $this->get($endpoint, $parametros); - $arrMotivosUrgencia = []; - if (isset($arrResultado)) { - $count = count($arrResultado['motivosUrgencia']); + $arrResultado = $this->get($endpoint, $parametros); + $arrMotivosUrgencia = []; + if (isset($arrResultado)) { + $count = count($arrResultado['motivosUrgencia']); - for ($i = 0; $i < $count; $i++) { - $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); - } - } - - } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + for ($i = 0; $i < $count; $i++) { + $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + } + } - return $arrMotivosUrgencia; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + + return $arrMotivosUrgencia; + } /** * Busca as espécies documentais aceitas pelo Barramento de Serviços do PEN @@ -774,7 +774,7 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { $endpoint = 'especies'; try { @@ -782,22 +782,22 @@ public function consultarEspeciesDocumentais() $arrResultado = $this->get($endpoint, $parametros); $arrEspecies = []; - if (isset($arrResultado)) { - $count = count($arrResultado['especies']); + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); - for ($i = 0; $i < $count; $i++) { - $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); - } + for ($i = 0; $i < $count; $i++) { + $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); } + } } catch (Exception $e) { $mensagem = "Não foi encontrado nenhuma espécie documental."; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); - } + } return $arrEspecies; - } + } public function enviarProcesso($parametros) @@ -827,28 +827,28 @@ public function enviarProcesso($parametros) - public function enviarProcessoREST($parametros) + public function enviarProcessoREST($parametros) { - $endpoint = "tramites/processo"; - try { - $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); + $endpoint = "tramites/processo"; + try { + $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); - return $arrResultado; + return $arrResultado; - } catch (Exception $e) { + } catch (Exception $e) { - $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; - $erroRequest = json_decode($e->getMessage()); - if ($erroRequest != null) { - $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; - } - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); + if ($erroRequest != null) { + $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; + } + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); - } } + } private function validarTramitaEmAndamento($parametros, $strMensagem) { @@ -898,26 +898,26 @@ public function listarPendencias($bolTodasPendencias) return $arrObjPendenciaDTO; } - private function tratarFalhaWebService(Exception $fault) + private function tratarFalhaWebService(Exception $fault) { - $mensagem = InfraException::inspecionar($fault); + $mensagem = InfraException::inspecionar($fault); - if ($fault instanceof RequestException && $fault->hasResponse()) { - - $codigoErro = $fault->getResponse()->getStatusCode(); - $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + if ($fault instanceof RequestException && $fault->hasResponse()) { - // Fixação de mensagem de erro para quando já existe um trâmite em andamento - if ($codigoErro == "0044") { - $mensagem = 'Processo já possui um trâmite em andamento.'; - } - } + $codigoErro = $fault->getResponse()->getStatusCode(); + $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - return $mensagem; + // Fixação de mensagem de erro para quando já existe um trâmite em andamento + if ($codigoErro == "0044") { + $mensagem = 'Processo já possui um trâmite em andamento.'; + } } + return $mensagem; + } + public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $idUnidadeOrigem, $idRepositorioDestino, $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) @@ -981,14 +981,14 @@ private function atribuirInformacoesModuloREST($objCabecalho) - private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) + private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) { try{ - if(!isset($dblIdProcedimento)){ + if(!isset($dblIdProcedimento)){ throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); - } + } $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); @@ -1003,7 +1003,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $contagem=1; $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { + foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); $assuntoDTO = new AssuntoDTO(); @@ -1018,13 +1018,13 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); switch ($infoAssunto->getStrStaDestinacao()) { - case AssuntoRN::$TD_ELIMINACAO: + case AssuntoRN::$TD_ELIMINACAO: $destinacao = "Eliminação"; - break; + break; - case AssuntoRN::$TD_GUARDA_PERMANENTE: + case AssuntoRN::$TD_GUARDA_PERMANENTE: $destinacao = "Guarda Permanente"; - break; + break; } $valorInput = $objRelProtocoloAssuntoDTO->getStrDescricaoAssunto() ? @@ -1032,80 +1032,147 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getStrCodigoEstruturado() ? - utf8_encode($infoAssunto->getStrCodigoEstruturado()) - : "NA"; + utf8_encode($infoAssunto->getStrCodigoEstruturado()) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getNumPrazoCorrente() ? - (int) $infoAssunto->getNumPrazoCorrente() - : "NA"; + (int) $infoAssunto->getNumPrazoCorrente() + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getNumPrazoIntermediario() ? - (int) $infoAssunto->getNumPrazoIntermediario() - : "NA"; + (int) $infoAssunto->getNumPrazoIntermediario() + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $destinacao ? - utf8_encode($destinacao) - : "NA"; + utf8_encode($destinacao) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getStrObservacao() ? - utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) - : "NA"; + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, + 'valor' => $valorInput ]; $contagem++; - } + } $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; return $objCabecalho; }catch(Exception $e){ - $mensagem = "Falha ao atribuir informações de assunto"; + $mensagem = "Falha ao atribuir informações de assunto"; throw new InfraException($mensagem, $e); } + } + + public function enviarComponenteDigital($parametros) + { + try { + + $objParametros = $parametros->dadosDoComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + $conteudo = $objParametros->conteudoDoComponenteDigital; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + + $strBaseUri = $this->strEnderecoWebService; + + $arrheaders = [ + 'Accept' => '*/*', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); + + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de componentes digitais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } - public function enviarComponenteDigital($parametros) + /** + * Método responsável por realizar o envio da parte de um componente digital + * @param $parametros + * @return mixed + * @throws InfraException + */ + public function enviarParteDeComponenteDigital($parametros) { - try { + try { - $objParametros = $parametros->dadosDoComponenteDigital; + $objParametros = $parametros->dadosDaParteDeComponenteDigital; $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; $protocolo = $objParametros->protocolo; $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; - $conteudo = $objParametros->conteudoDoComponenteDigital; + + $indetificacaoDaParte = $objParametros->identificacaoDaParte; + $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; + + $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; $queryParams = [ 'hashDoComponenteDigital' => $hashDoComponenteDigital, 'protocolo' => $protocolo ]; - $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); @@ -1115,6 +1182,7 @@ public function enviarComponenteDigital($parametros) $arrheaders = [ 'Accept' => '*/*', + 'Content-Type' => 'application/json', ]; $strClientGuzzle = new GuzzleHttp\Client([ @@ -1124,96 +1192,28 @@ public function enviarComponenteDigital($parametros) 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); - + $arrOptions = [ 'query' => $queryParams, 'multipart' => [ [ 'name' => 'conteudo', 'contents' => $conteudo, - 'filename' => 'conteudo.html', - 'headers' => ['Content-Type' => 'text/html'] + 'filename' => 'arquivo_externo.html', + // 'headers' => ['Content-Type' => 'text/html'] ], ], ]; - - $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - - } catch (\Exception $e) { - $mensagem = "Falha no envio de componentes digitais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - } - - /** - * Método responsável por realizar o envio da parte de um componente digital - * @param $parametros - * @return mixed - * @throws InfraException - */ - public function enviarParteDeComponenteDigital($parametros) - { - try { - - $objParametros = $parametros->dadosDaParteDeComponenteDigital; - $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; - - $protocolo = $objParametros->protocolo; - $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; - - $indetificacaoDaParte = $objParametros->identificacaoDaParte; - $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; - - $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; - - $queryParams = [ - 'hashDoComponenteDigital' => $hashDoComponenteDigital, - 'protocolo' => $protocolo - ]; - - $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; - - $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); - $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); - $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - - $strBaseUri = $this->strEnderecoWebService; - - $arrheaders = [ - 'Accept' => '*/*', - 'Content-Type' => 'application/json', - ]; - - $strClientGuzzle = new GuzzleHttp\Client([ - 'base_uri' => $strBaseUri, - 'headers' => $arrheaders, - 'timeout' => 5.0, - 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], - ]); - - - $arrOptions = [ - 'query' => $queryParams, - 'multipart' => [ - [ - 'name' => 'conteudo', - 'contents' => $conteudo, - 'filename' => 'arquivo_externo.html', - // 'headers' => ['Content-Type' => 'text/html'] - ], - ], - ]; - $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - } catch (\Exception $e) { - $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); - $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + } catch (\Exception $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } /** * Método responsável por sinalizar o término do envio das partes de um componente digital @@ -1358,9 +1358,9 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR throw new InfraException('Parâmetro $objProcesso não informado.'); } - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } //Monta dados do processo eletrônico $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); @@ -1370,19 +1370,19 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR //Montar dados dos procedimentos apensados if (isset($parObjProtocolo->processoApensado)) { - if (!is_array($parObjProtocolo->processoApensado)) { - $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); - } + if (!is_array($parObjProtocolo->processoApensado)) { + $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); + } $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; - foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { - $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); - $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); - $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); - $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; - } + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { + $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); + $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); + $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); + $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); + $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; + } $objProcessoEletronicoDTO->setArrObjRelProcessoEletronicoApensado($arrObjRelProcessoEletronicoApensadoDTO); } @@ -1697,35 +1697,35 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden - public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) { - $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; - try { - $identificacaoDoComponenteDigital = [ - 'hashDoComponenteDigital' => $parStrHashComponenteDigital, - 'protocolo' => $parStrProtocolo, - ]; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; + try { + $identificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $parStrHashComponenteDigital, + 'protocolo' => $parStrProtocolo, + ]; - // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital - if (!is_null($parObjParteComponente)) { - $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; - $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; - } + // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital + if (!is_null($parObjParteComponente)) { + $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; + } - $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); + $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); - $objResultado = new stdClass(); - $objResultado->conteudoDoComponenteDigital = new stdClass(); - $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); + $objResultado = new stdClass(); + $objResultado->conteudoDoComponenteDigital = new stdClass(); + $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); - return $objResultado; + return $objResultado; - } catch (\Exception $e) { - $mensagem = "Falha no recebimento do componente digital"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + } catch (\Exception $e) { + $mensagem = "Falha no recebimento do componente digital"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { @@ -2223,13 +2223,13 @@ public function isDisponivelCancelarTramite($strProtocolo = '') $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - if(!$arrObjTramiteDTO){ + if(!$arrObjTramiteDTO){ return false; - } + } $objTramiteDTO = $arrObjTramiteDTO[0]; - try { + try { $parametros = new stdClass(); $parametros->filtroDeConsultaDeTramites = new stdClass(); $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); @@ -2241,29 +2241,29 @@ public function isDisponivelCancelarTramite($strProtocolo = '') return $objPenWs->consultarTramites($parametros); }); - if($objMeta->tramitesEncontrados) { - $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; - $objMetaTramite = $arrObjMetaTramite[0]; + if($objMeta->tramitesEncontrados) { + $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; + $objMetaTramite = $arrObjMetaTramite[0]; - $strSituacoesDisponíveisCancelamento = array( - static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, - static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO - ); + $strSituacoesDisponíveisCancelamento = array( + static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, + static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO + ); - if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ + if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ return true; + } } - } return false; - } - catch(SoapFault $e) { + } + catch(SoapFault $e) { return false; - } - catch(Exception $e) { + } + catch(Exception $e) { return false; + } } -} public function consultarHipotesesLegais($ativos = true) { @@ -2389,32 +2389,32 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); - } else { - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); - } + if (is_array($documento) && $documento['componentesDigitais']) { + $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); + } else { + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } } return $arrObjDocumentoPadronizados; } - public static function obterComponentesDocumentos($parObjDocumento) - { - - if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { - return $parObjDocumento['componentesDigitais']; - } - - $arrObjComponenteDigital = array(); - if (isset($parObjDocumento->componentesDigitais)) { - $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } + public static function obterComponentesDocumentos($parObjDocumento) + { + + if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { + return $parObjDocumento['componentesDigitais']; + } + + $arrObjComponenteDigital = array(); + if (isset($parObjDocumento->componentesDigitais)) { + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } - return $arrObjComponenteDigital; - } + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2469,9 +2469,9 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if (isset($parObjDocumento['componentesDigitais'])) { - $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); - } + if (isset($parObjDocumento['componentesDigitais'])) { + $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + } return $arrObjComponenteDigital; } @@ -2490,9 +2490,9 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ return $parObjProtocolo; @@ -2809,9 +2809,9 @@ public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) * @throws InfraException Falha na obtenção de unidades externas. * @return array */ - public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) + public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) { - $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; try { $arrResultado = $this->get($endpoint); return $arrResultado; @@ -2827,30 +2827,30 @@ public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) * Iniciar requisição HTTP utilizado para comunicação Webservice REST * */ - private function getArrPenWsRest($method, $endpoint, $options = []) + private function getArrPenWsRest($method, $endpoint, $options = []) { try { $arrResultado = $this->strClientGuzzle->request($method, $endpoint, $options); $base64 = $arrResultado->getBody()->getContents(); $foo = json_decode($arrResultado->getBody(), true); - if ($foo != null) { - return $foo; - } + if ($foo != null) { + return $foo; + } return $base64; } catch (RequestException $e) { $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); - // Lança uma nova exceção com os detalhes do RequestException - throw new Exception(json_encode([ - 'error' => true, + // Lança uma nova exceção com os detalhes do RequestException + throw new Exception(json_encode([ + 'error' => true, 'codigoErro' => $erroResposta->codigoErro, 'message' => $erroResposta->mensagem, 'exception' => $e->getMessage(), 'details' => $e->hasResponse() ? (string) $e->getResponse()->getBody() : 'No response body' - ])); - } + ])); + } } private function get($endpoint, $params = []) { diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 0089a9105..70b829d87 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -150,65 +150,65 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT $contDocumentosDto = 0; $arrayRetornoObjAnexoDTO = array(); - foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { - $contDocumentosDto++; - $objAnexoRN = new AnexoRN(); - - $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); - $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); - $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; - - $zipFile= new ZipArchive(); - $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); - - $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); - $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; - $numSequencial = 0; - foreach($arrIdDocumentos as $dblIdDocumento){ - $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; - $strDocumento = ''; - if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ - $arrayAnexosExcluirFisicamente = array(); - foreach ($parArrAnexoDTO as $objAnexoDTO){ - $numSequencial++; - - if ($objAnexoDTO==null){ - $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); - }else{ - /** - * Aqui será atribuído um nome aos anexos - */ - $ext = explode('.', $objAnexoDTO->getStrNome()); - /** - * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. - */ - $ext = strtolower($ext[count($ext)-1]); - $strNomeArquivo = $objAnexoDTO->getStrNome(); - - /** - * Aqui, o anexo será adicionado ao zip - */ - $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; - //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - throw new InfraException('Erro adicionando arquivo externo ao zip.'); - } - else{ - /** - * Aqui quer dizer que o arquivo já foi colocado dentro do zip. - * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. - */ - array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); - } - } - } - }else{ - $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); - } - } + foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { + $contDocumentosDto++; + $objAnexoRN = new AnexoRN(); + + $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); + $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); + $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; + + $zipFile= new ZipArchive(); + $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); + + $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); + $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; + $numSequencial = 0; + foreach($arrIdDocumentos as $dblIdDocumento){ + $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; + $strDocumento = ''; + if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ + $arrayAnexosExcluirFisicamente = array(); + foreach ($parArrAnexoDTO as $objAnexoDTO){ + $numSequencial++; + + if ($objAnexoDTO==null){ + $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); + }else{ + /** + * Aqui será atribuído um nome aos anexos + */ + $ext = explode('.', $objAnexoDTO->getStrNome()); + /** + * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. + */ + $ext = strtolower($ext[count($ext)-1]); + $strNomeArquivo = $objAnexoDTO->getStrNome(); + + /** + * Aqui, o anexo será adicionado ao zip + */ + $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; + //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + throw new InfraException('Erro adicionando arquivo externo ao zip.'); + } + else{ + /** + * Aqui quer dizer que o arquivo já foi colocado dentro do zip. + * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. + */ + array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); + } + } + } + }else{ + $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); + } + } $objInfraException->lancarValidacoes(); if ($zipFile->close() === false) { - throw new InfraException('Não foi possível fechar arquivo zip.'); + throw new InfraException('Não foi possível fechar arquivo zip.'); } $objAnexoDTO = new AnexoDTO(); $arrNomeArquivo = explode('/', $strCaminhoCompletoArquivoZip); @@ -222,7 +222,7 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT * Vamos varrer os arquivos que devem ser excluídos fisicamente da pasta temporária e excluí-los */ foreach ($arrayAnexosExcluirFisicamente as $caminhoArquivoExcluirFisicamente){ - unlink($caminhoArquivoExcluirFisicamente); + unlink($caminhoArquivoExcluirFisicamente); } } return $objAnexoDTO; @@ -256,9 +256,9 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, */ public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) { - if (!isset($parArrComponenteDigital)) { - throw new InfraException("Componente Digital não informado"); - } + if (!isset($parArrComponenteDigital)) { + throw new InfraException("Componente Digital não informado"); + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 200a2715f..9c4871a3d 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1667,9 +1667,9 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o foreach($arrObjDocumentos as $objDocumento) { - if (is_array($objDocumento)) { - $objDocumento = (object) $objDocumento; - } + if (is_array($objDocumento)) { + $objDocumento = (object) $objDocumento; + } if(!isset($objDocumento->staTipoProtocolo) || $bolDocumentoAvulso) { @@ -2643,23 +2643,23 @@ private function documentosPendenteRegistro($parNumIdProcedimento, $parNumIdDocu * @param $parComponentePendente * @return $tamanhoComponentePendende */ - private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) - { - //Obtém os documentos do protocolo em um array - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - - //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente - foreach ($arrObjDocumentos as $objDocumento) { - $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { - if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { - $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; - break; - } - } - } - return $tamanhoComponentePendende; - } + private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) + { + //Obtém os documentos do protocolo em um array + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + + //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente + foreach ($arrObjDocumentos as $objDocumento) { + $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); + foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { + if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { + $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + break; + } + } + } + return $tamanhoComponentePendende; + } /** @@ -2722,21 +2722,21 @@ private function receberComponenenteDigitalParticionado($componentePendente, $nr } - private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) - { - $resultado = array(); - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - foreach ($arrObjDocumentos as $arrDocumento) { - if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ - $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); - } - foreach ($arrDocumento['componentesDigitais'] as $objComponente) { - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); - $resultado[$strHash] = $objComponente; - } - } - return $resultado; - } + private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) + { + $resultado = array(); + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + foreach ($arrObjDocumentos as $arrDocumento) { + if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ + $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + } + foreach ($arrDocumento['componentesDigitais'] as $objComponente) { + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + $resultado[$strHash] = $objComponente; + } + } + return $resultado; + } /** From 0e904261882a1348f0a9ee883718e9a5af17fbcb Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Mon, 25 Nov 2024 09:31:41 -0300 Subject: [PATCH 10/18] fix: alterar estutura removendo parametro em obsoleto --dev --- Makefile | 8 +++++--- tests_sei4/funcional/docker-compose.yml | 4 ++-- tests_sei41/funcional/docker-compose.yml | 4 ++-- tests_super/funcional/docker-compose.yml | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index bec22240b..2fd6d0f9d 100755 --- a/Makefile +++ b/Makefile @@ -144,8 +144,10 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install --no-dev' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install --no-dev' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update --lock' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update --lock' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" @@ -202,7 +204,7 @@ test-parallel-otimizado: .env $(FILE_VENDOR_FUNCIONAL) up test-unit: $(FILE_VENDOR_UNITARIO) - $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/ProcessoEletronicoRNTest.php' + $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/$(addsuffix .php,$(teste))' test: test-unit test-functional diff --git a/tests_sei4/funcional/docker-compose.yml b/tests_sei4/funcional/docker-compose.yml index 54a67abcd..9df957d74 100755 --- a/tests_sei4/funcional/docker-compose.yml +++ b/tests_sei4/funcional/docker-compose.yml @@ -151,7 +151,7 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ./composer.json:/opt/sei/web/modulos/pen/composer.json - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: @@ -214,7 +214,7 @@ services: - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 diff --git a/tests_sei41/funcional/docker-compose.yml b/tests_sei41/funcional/docker-compose.yml index 89b0c51ad..7d255f91c 100755 --- a/tests_sei41/funcional/docker-compose.yml +++ b/tests_sei41/funcional/docker-compose.yml @@ -150,7 +150,7 @@ services: - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 @@ -210,7 +210,7 @@ services: - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 diff --git a/tests_super/funcional/docker-compose.yml b/tests_super/funcional/docker-compose.yml index b09161200..5ac470cec 100755 --- a/tests_super/funcional/docker-compose.yml +++ b/tests_super/funcional/docker-compose.yml @@ -150,7 +150,7 @@ services: - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 From d25d77282c77717492aa4d4a5c2e2f8b0c13c219 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Tue, 26 Nov 2024 02:35:11 -0300 Subject: [PATCH 11/18] =?UTF-8?q?fix:=20alterar=20WSDL=20para=20REST=20no?= =?UTF-8?q?=20verificador=20de=20instala=C3=A7=C3=A3o=20e=20corrigir=20err?= =?UTF-8?q?o=20de=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 +- src/rn/PENAgendamentoRN.php | 2 +- src/rn/ProcessoEletronicoRN.php | 64 ++++++------------- src/rn/VerificadorInstalacaoRN.php | 16 ++--- .../PenMapUnidadesRestricaoFixture.php | 2 +- .../PenMapUnidadesRestricaoFixture.php | 2 +- .../PenMapUnidadesRestricaoFixture.php | 2 +- 7 files changed, 31 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index 2fd6d0f9d..00f257ac2 100755 --- a/Makefile +++ b/Makefile @@ -144,10 +144,10 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update --lock' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update --lock' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" diff --git a/src/rn/PENAgendamentoRN.php b/src/rn/PENAgendamentoRN.php index d28e16d90..7cd742fe8 100755 --- a/src/rn/PENAgendamentoRN.php +++ b/src/rn/PENAgendamentoRN.php @@ -49,7 +49,7 @@ protected function atualizarHipotesesLegaisControlado() continue; } - $objDTO->setStrNome(mb_convert_encoding($hipotese->nome, 'ISO-8859-1', 'UTF-8')); + $objDTO->setStrNome(mb_convert_encoding($hipotese['nome'], 'ISO-8859-1', 'UTF-8')); if ($hipotese['status']) { $objDTO->setStrAtivo('S'); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 0db9f0fbf..11da81f4a 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -212,14 +212,14 @@ public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorio * * @return void */ - public function listarRepositoriosDeEstruturas() + public function listarRepositoriosDeEstruturas($ativo = true) { $arrObjRepositorioDTO = []; $endpoint = 'repositorios-de-estruturas'; try { $parametros = [ - 'ativos' => true + 'ativos' => $ativo ]; $arrResultado = $this->get($endpoint, $parametros); @@ -799,37 +799,9 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } - - public function enviarProcesso($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->enviarProcesso($parametros); - }); - - } catch (\SoapFault $e) { - $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); - - if ($e instanceof \SoapFault && !empty($e->detail->interoperabilidadeException->codigoErro) && $e->detail->interoperabilidadeException->codigoErro == '0005') { - $strMensagem .= 'O código mapeado para a unidade ' . mb_convert_encoding($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome, 'ISO-8859-1', 'UTF-8') . ' 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); - } 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); - } - } - - - public function enviarProcessoREST($parametros) - { - $endpoint = "tramites/processo"; + { + $endpoint = "tramites/processo"; try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -837,8 +809,8 @@ public function enviarProcessoREST($parametros) } catch (Exception $e) { - $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; - $erroRequest = json_decode($e->getMessage()); + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); if ($erroRequest != null) { $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; } @@ -880,17 +852,17 @@ public function listarPendencias($bolTodasPendencias) $arrResultado = $this->get($endpoint, $parametros); - if (isset($arrResultado)) { - foreach ($arrResultado as $idt) { - $pendenciaDTO = new PendenciaDTO(); - $pendenciaDTO->setNumIdentificacaoTramite($idt['IDT']); - $pendenciaDTO->setStrStatus($idt['status']); - $arrObjPendenciaDTO[] = $pendenciaDTO; + if (is_array($arrResultado) && !is_null($arrResultado)) { + foreach ($arrResultado as $strPendencia) { + $pendenciaDTO = new PendenciaDTO(); + $pendenciaDTO->setNumIdentificacaoTramite($strPendencia['IDT']); + $pendenciaDTO->setStrStatus($strPendencia['status']); + $arrObjPendenciaDTO[] = $pendenciaDTO; } - } + } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; + $mensagem = "Falha na listagem de pendências de trâmite de processos"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); } @@ -2853,19 +2825,19 @@ private function getArrPenWsRest($method, $endpoint, $options = []) } } - private function get($endpoint, $params = []) { + public function get($endpoint, $params = []) { return $this->getArrPenWsRest('GET', $endpoint, ['query' => $params]); } - private function post($endpoint, $data = []) { + public function post($endpoint, $data = []) { return $this->getArrPenWsRest('POST', $endpoint, ['json' => $data]); } - private function put($endpoint, $data = []) { + public function put($endpoint, $data = []) { return $this->getArrPenWsRest('PUT', $endpoint, ['json' => $data]); } - private function delete($endpoint, $params = []) { + public function delete($endpoint, $params = []) { return $this->getArrPenWsRest('DELETE', $endpoint, ['query' => $params]); } } \ No newline at end of file diff --git a/src/rn/VerificadorInstalacaoRN.php b/src/rn/VerificadorInstalacaoRN.php index 092088184..d3ffeeaa4 100755 --- a/src/rn/VerificadorInstalacaoRN.php +++ b/src/rn/VerificadorInstalacaoRN.php @@ -233,12 +233,14 @@ public function verificarConexaoBarramentoPEN() $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $strEnderecoWSDL = $strEnderecoWebService . '?wsdl'; - $curl = curl_init($strEnderecoWSDL); + $healthcheck = 'healthcheck'; + + $strEnderecoBarramento = $strEnderecoWebService . '/' . $healthcheck; + $curl = curl_init($strEnderecoBarramento); try{ $bolEmProducao = boolval(ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')); - curl_setopt($curl, CURLOPT_URL, $strEnderecoWSDL); + curl_setopt($curl, CURLOPT_URL, $strEnderecoBarramento); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); @@ -254,12 +256,7 @@ public function verificarConexaoBarramentoPEN() $strErrorMsg = curl_error($curl); } if (isset($strErrorMsg)) { - throw new Exception("Erro no CURL ao obter o WSDL em $strEnderecoWSDL. Erro detalhado: $strErrorMsg."); - } - $objXML = simplexml_load_string($strOutput); - - if(empty($strOutput) || $strOutput === false || empty($objXML) || $objXML === false){ - throw new Exception("Falha na validação do WSDL do webservice de integração com o Tramita GOV.BR localizado em $strEnderecoWSDL"); + throw new Exception("Erro no CURL para $strEnderecoBarramento. Erro detalhado: $strErrorMsg."); } } finally{ @@ -282,6 +279,7 @@ public function verificarAcessoPendenciasTramitePEN() try{ $objProcessoEletronicoRN = new ProcessoEletronicoRN(); $objProcessoEletronicoRN->listarPendencias(false); + return true; } catch(Exception $e){ throw new InfraException("Falha no acesso aos serviços de integração do Tramita GOV.BR: $e"); diff --git a/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); diff --git a/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); diff --git a/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); From 82a57618ccc63db00fe0ae159696ac253b7eb067 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 6 Dec 2024 08:07:39 -0300 Subject: [PATCH 12/18] =?UTF-8?q?fix::=20corrigir=20atualiza=C3=A7=C3=A3o?= =?UTF-8?q?=20no=20banco=20para=20proceessos=20recebidos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pen_map_unidade_cadastrar.php | 15 ++++++++------- src/rn/ExpedirProcedimentoRN.php | 7 ++++--- src/rn/ProcessoEletronicoRN.php | 19 +++++------------- src/rn/ReceberProcedimentoRN.php | 32 ++++++++++++++++++------------- 4 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index f129f6ec8..ce03d4f84 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -183,18 +183,19 @@ $objUnidadeDTO->retStrDescricao(); $arrMapIdUnidade = array(); $objPenUnidadeRN = new PenUnidadeRN(); - foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { - $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); - } + foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { + $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); + } //Verifica se o numero da unidade esta vazio, senão estiver busca o nome da unidade para exibição $strNomeUnidadeSelecionada = ''; if(!empty($objPenUnidadeDTO->getNumIdUnidadeRH())){ - $objProcessoEletronico = new ProcessoEletronicoRN(); - $objProcessoEletronicoDTO = $objProcessoEletronico->listarEstruturas($numIdRepositorioOrigem, $objPenUnidadeDTO->getNumIdUnidadeRH()); - if(!is_null($objProcessoEletronicoDTO[0])){ - $strNomeUnidadeSelecionada = $objProcessoEletronicoDTO[0]->getStrNome(); + $objProcessoEletronico = new ProcessoEletronicoRN(); + $objProcessoEletronicoDTO = $objProcessoEletronico->buscarEstrutura($numIdRepositorioOrigem, $objPenUnidadeDTO->getNumIdUnidadeRH()); + + if(!is_null($objProcessoEletronicoDTO)){ + $strNomeUnidadeSelecionada = $objProcessoEletronicoDTO->getStrNome(); }else{ $strNomeUnidadeSelecionada = 'Unidade não encontrada.'; } diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index c949b6e83..c2832a8ed 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -1247,7 +1247,6 @@ public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objCompone $objAssinaturaDTO->retStrP7sBase64(); $resAssinatura = $this->objAssinaturaRN->listarRN1323($objAssinaturaDTO); - $objComponenteDigital['assinaturasDigitais'] = array(); foreach ($resAssinatura as $keyOrder => $assinatura) { $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setNumIdAtividade($assinatura->getNumIdAtividade()); //7 @@ -1281,8 +1280,11 @@ public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objCompone 'formato' => 'PKCS7', 'conteudo' => 'vazio' ]; - } + } + } + + if ($objAssinaturaDigital != null) { $objComponenteDigital['assinaturasDigitais'][] = $objAssinaturaDigital; } @@ -1780,7 +1782,6 @@ private function atribuirNumeracaoDocumentoREST($objDocumento, DocumentoDTO $par $strStaNumeracao = $objSerieDTO->getStrStaNumeracao(); - $objDocumento['identificacao'] = array(); if ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_UNIDADE) { $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 11da81f4a..7416afeba 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1218,30 +1218,21 @@ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) public function solicitarMetadados($parNumIdentificacaoTramite) { - $endpoint = "tramites/{$parNumIdentificacaoTramite}"; + $endpoint = "tramites/{$parNumIdentificacaoTramite}"; try { $parametros = [ 'IDT' => $parNumIdentificacaoTramite ]; $arrResultado = $this->get($endpoint, $parametros); - $arrResultado['propriedadeAdicional'] = $arrResultado['propriedadesAdicionais']; - $arrResultadoDocumentos = $arrResultado['processo']['documentos'][0]; - $arrResultado['processo']['documentos'][0]['componenteDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]; - $arrResultado['processo']['documentos'][0]['componenteDigital']['assinaturaDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]['assinaturasDigitais'][0]; + $arrResultado['IDT'] = $parNumIdentificacaoTramite; + $arrResultado['NRE'] = $arrResultado['nre']; $objResultado = new stdClass(); - $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); - - $objMetaProcesso = $objResultado->metadados->processo; - $arrObjMetaDocumento = (array) $objMetaProcesso->documentos; - $arrObjMetaInteressado = (array) $objMetaProcesso->interessados; - $objResultado->IDT = $parNumIdentificacaoTramite; - $objResultado->metadados->NRE = $objResultado->metadados->nre; - $objResultado->metadados->processo->documento = $arrObjMetaDocumento[0]; - $objResultado->metadados->processo->interessado = $arrObjMetaInteressado; + $objResultado->NRE = $arrResultado['nre']; + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); return $objResultado; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 9c4871a3d..c9da9befd 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -21,6 +21,7 @@ class ReceberProcedimentoRN extends InfraRN private $objSeiRN; private $objEnviarReciboTramiteRN; private $objExpedirProcedimentoRN; + private $objReceberComponenteDigitalRN; public function __construct() { @@ -334,8 +335,10 @@ private function consultarTramite($parNumIdTramite) $objTramite = $arrObjTramite[0]; - if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ - $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); + if(!is_array($objTramite->hashDosComponentesPendentesDeRecebimento)){ + $objTramite->componenteDigitalPendenteDeRecebimento = (array) $objTramite->hashDosComponentesPendentesDeRecebimento; + + $objTramite->hashDosComponentesPendentesDeRecebimento = (array) $objTramite->hashDosComponentesPendentesDeRecebimento; } } @@ -1054,7 +1057,7 @@ private function gerarProcedimento($objMetadadosProcedimento, $parObjProtocolo) $objProtocoloDTO->setArrObjAnexoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloAssuntoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloProtocoloDTO(array()); - $this->atribuirParticipantes($objProtocoloDTO, $parObjProtocolo->interessado); + $this->atribuirParticipantes($objProtocoloDTO, $parObjProtocolo->interessados); $strDescricao = ""; if(isset($parObjProtocolo->processoDeNegocio)){ @@ -1381,7 +1384,7 @@ private function atribuirParticipantes(ProtocoloDTO $objProtocoloDTO, $arrObjInt } if (!is_array($arrObjInteressados)) { - $arrObjInteressados = array($arrObjInteressados); + $arrObjInteressados = (array) $arrObjInteressados; } for($i=0; $i < count($arrObjInteressados); $i++){ @@ -1843,16 +1846,16 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->setStrSinBloqueado('N'); - if (isset($objDocumento->componenteDigital)) { - $componentesDigitais = $objDocumento->componenteDigital; - } else { - $componentesDigitais[] = $objDocumento->componentesDigitais; - } + // if (isset($objDocumento->componenteDigital)) { + // $componentesDigitais = $objDocumento->componenteDigital; + // } else { + // $componentesDigitais = (array) $objDocumento->componentesDigitais; + // } //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, - $componentesDigitais, + $objDocumento->componentesDigitais, $arrDocumentosExistentesPorHash, $parObjMetadadosProcedimento->arrHashComponenteBaixados); @@ -1928,7 +1931,10 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { - + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); $bolComponenteDigitalExistente = array_key_exists($strHashComponenteDigital, $arrDocumentosExistentesPorHash); @@ -2069,7 +2075,7 @@ private function atribuirComponentesDigitais(DocumentoDTO $objDocumentoDTO, $par // Atribui componentes digitais já presentes no processo e não reenviados pelo Tramita.gov.br $arrAnexo = array(); $arrAnexo = $this->atribuirComponentesJaExistentesNoProcesso( - $objDocumentoDTO, + $parObjDocumentoDTO, $parArrObjComponentesDigitais, $arrDocumentosExistentesPorHash, $arrHashComponenteBaixados @@ -2816,7 +2822,7 @@ private function criarDiretorioAnexo($parObjAnexoDTO) private function adicionarObservacoesSobreNumeroDocumento($parObjDocumento) { $arrObjObservacoes = array(); - $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor->numeroDeIdentificacao; + $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor['numeroDeIdentificacao']; if(!empty($strNumeroDocumentoOrigem)){ $objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setStrDescricao("Número do Documento na Origem: " . $strNumeroDocumentoOrigem); From 9b5ff653ce2377bc976431369dfa88eabedc0365 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 6 Dec 2024 16:56:09 -0300 Subject: [PATCH 13/18] chore: adicionar camiinho absoluto para chamada do vendor dentro da class --- src/rn/ProcessoEletronicoRN.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 7416afeba..b53f55603 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1,6 +1,7 @@ Date: Mon, 9 Dec 2024 07:47:49 -0300 Subject: [PATCH 14/18] =?UTF-8?q?feat:=20alterar=20tipagem=20de=20vari?= =?UTF-8?q?=C3=A1vel=20em=20todos=20os=20m=C3=A9todos=20=20que=20consome?= =?UTF-8?q?=20a=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ProcessoEletronicoRN.php | 86 +++++++++++++++++---------- src/rn/ReceberComponenteDigitalRN.php | 10 +++- src/rn/ReceberProcedimentoRN.php | 85 +++++++++++++++++--------- 3 files changed, 119 insertions(+), 62 deletions(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index b53f55603..df373b553 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -184,7 +184,7 @@ private function getObjPenWs() public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = null; - $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + $endpoint = 'repositorios-de-estruturas'; try { $parametros = [ 'ativo' => true @@ -193,10 +193,12 @@ public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorio if (isset($arrResultado)) { foreach ($arrResultado as $repositorio) { + if ($repositorio['id'] == $numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = new RepositorioDTO(); $objRepositorioDTO->setNumId($repositorio['id']); $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } } } } catch (Exception $e) { @@ -1233,8 +1235,20 @@ public function solicitarMetadados($parNumIdentificacaoTramite) $objResultado = new stdClass(); $objResultado->IDT = $parNumIdentificacaoTramite; $objResultado->NRE = $arrResultado['nre']; + + $multivalorado = false; + if (count($arrResultado['processo']['documentos']) <= 1) { + $arrResultado['processo']['documentos'] = (object) $arrResultado['processo']['documentos'][0]; + } else { + $multivalorado = true; + } + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + if ($multivalorado) { + $objResultado->metadados->processo->documentos = (array) $objResultado->metadados->processo->documentos; + } + return $objResultado; } catch (\Exception $e) { @@ -1478,6 +1492,10 @@ protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronic */ public static function getHashFromMetaDados($objMeta) { + if (is_array($objMeta)) { + $objMeta = (object) $objMeta; + } + $strHashConteudo = ''; if (isset($objMeta)) { @@ -1485,7 +1503,7 @@ public static function getHashFromMetaDados($objMeta) $strHashConteudo = $objMeta; } else { $matches = array(); - $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta['conteudo']; + $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->conteudo; if (preg_match('/^(.*)<\/hash>$/', $strHashConteudo, $matches, PREG_OFFSET_CAPTURE)) { $strHashConteudo = $matches[1][0]; @@ -1612,8 +1630,8 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $objComponenteDigitalDTO->setStrNome(utf8_decode($objComponenteDigital->nome)); if(isset($objDocumento->especie)){ - $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie['codigo'])); - $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie['nomeNoProdutor'])); + $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie->codigo)); + $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie->nomeNoProdutor)); } $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); @@ -2318,7 +2336,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair { $arrObjDocumento = array(); if(isset($parObjProtocolo->documentos)){ - $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : json_decode(json_encode($parObjProtocolo->documentos), true); + $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : array($parObjProtocolo->documentos); usort($arrObjProtocolo, array("ProcessoEletronicoRN", "comparacaoOrdemAjustadaDocumentos")); //Tratamento recursivo para processos anexados @@ -2352,13 +2370,12 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); - } else { - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento = (object) $documento; + } + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); } - } return $arrObjDocumentoPadronizados; } @@ -2366,11 +2383,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair public static function obterComponentesDocumentos($parObjDocumento) { - - if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { - return $parObjDocumento['componentesDigitais']; - } - + $arrObjComponenteDigital = array(); if (isset($parObjDocumento->componentesDigitais)) { $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); @@ -2430,11 +2443,11 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) * @param $parObjDocumento * @return array */ - public static function obterComponentesDigitaisDocumento($parObjDocumento) + public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if (isset($parObjDocumento['componentesDigitais'])) { - $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + if(isset($parObjDocumento->componentesDigitais)){ + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); } return $arrObjComponenteDigital; @@ -2454,9 +2467,6 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ return $parObjProtocolo; @@ -2731,18 +2741,30 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public static function converterArrayParaObjeto($array) + public static function converterArrayParaObjeto($array) + { + if (is_array($array)) { + // Verificar se o array é associativo + if (self::verificarSeArrayAssociativo($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = self::converterArrayParaObjeto($value); + } + return $object; + } else { + // Para arrays indexados, manter como está + return array_map([self::class, 'converterArrayParaObjeto'], $array); + } + } + + return $array; + } + + private static function verificarSeArrayAssociativo(array $array): bool { - if (is_array($array)) { - $object = new stdClass(); - foreach ($array as $key => $value) { - $object->$key = self::converterArrayParaObjeto($value); - } - return $object; + return array_keys($array) !== range(0, count($array) - 1); } - - return $array; - } + /** * Consulta as estruturas de um repositório de estruturas. diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 70b829d87..82077f3e2 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -254,11 +254,15 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, * @return AnexoDTO * */ - public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) + public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $parObjConteudo) { - if (!isset($parArrComponenteDigital)) { + if (!isset($parObjComponenteDigital)) { throw new InfraException("Componente Digital não informado"); } + + if (is_array($parObjComponenteDigital)) { + $parObjComponenteDigital = (object) $parObjComponenteDigital; + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; @@ -273,7 +277,7 @@ public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $objAnexoDTO->setDthInclusao(InfraData::getStrDataHoraAtual()); $objAnexoDTO->setNumTamanho(filesize(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload)); $objAnexoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAnexoDTO->setStrNome($parArrComponenteDigital['nome']); + $objAnexoDTO->setStrNome($parObjComponenteDigital->nome); return $objAnexoDTO; } diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index c9da9befd..70886f4d8 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -246,7 +246,7 @@ private function baixarComponentesDigitais($parObjTramite, $parObjMetadadosProce // pendentes de recebimento informado pelo Tramita.gov.br não está de acordo com a lista atual de arquivos // mantida pela aplicação. $arrHashComponentesProtocolo = $this->listarHashDosComponentesMetadado($objProtocolo); - $arrHashPendentesRecebimento = $parObjTramite->componenteDigitalPendenteDeRecebimento; + $arrHashPendentesRecebimento = $parObjTramite->hashDosComponentesPendentesDeRecebimento; $numQtdComponentes = count($arrHashComponentesProtocolo); $this->gravarLogDebug("$numQtdComponentes componentes digitais identificados no protocolo {$objProtocolo->protocolo}", 2); @@ -648,14 +648,19 @@ private function listarHashDosComponentesMetadado($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach($arrObjDocumento as $objDocumento){ //Desconsidera os componendes digitais de documentos cancelados - if(!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - if(!isset($objDocumento['componentesDigitais'])){ - throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento['ordem']} não informado."); + if(!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + if(!isset($objDocumento->componentesDigitais)){ + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado."); } - $arrObjComponentesDigitais = is_array($objDocumento['componentesDigitais']) ? $objDocumento['componentesDigitais'] : array($objDocumento['componentesDigitais']); + $arrObjComponentesDigitais = is_array($objDocumento->componentesDigitais) ? $objDocumento->componentesDigitais : array($objDocumento->componentesDigitais); foreach ($arrObjComponentesDigitais as $objComponenteDigital) { - $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital['hash']); + + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); } } } @@ -675,8 +680,11 @@ private function listarMetaDadosComponentesDigitais($parObjProtocolo) $objMapBD = new GenericoBD($this->getObjInfraIBanco()); $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); - foreach($arrObjDocumento as $objDocumento){ - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componenteDigital->hash); + foreach($arrObjDocumento as $key => $objDocumento){ + if (is_array($objDocumento->componentesDigitais[$key])) { + $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; + } + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componentesDigitais[$key]->hash); $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); $objMapDTO->setNumCodigoEspecie($objDocumento->especie->codigo); @@ -721,25 +729,30 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac if(!isset($numIdTipoDocumentoPadrao)){ foreach($arrObjDocumentos as $objDocument){ + $especie = $objDocument->especie; + if (is_array($especie)) { + $objDocument->especie = (object) $objDocument->especie; + } + $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); $objPenRelTipoDocMapEnviadoDTO->retTodos(); - $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument['especie']['codigo']); + $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument->especie->codigo); $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD(BancoSEI::getInstance()); $numContador = (int)$objProcessoEletronicoDB->contar($objPenRelTipoDocMapEnviadoDTO); // Não achou, ou seja, não esta cadastrado na tabela, então não é aceito nesta unidade como válido if($numContador <= 0) { - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument['especie']['nomeNoProdutor'])), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); - throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument['especie']['nomeNoProdutor'], ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument->especie->nomeNoProdutor)), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); + throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); } } } //Não valida informações do componente digital caso o documento esteja cancelado foreach ($arrObjDocumentos as $objDocumento) { - if (!isset($objDocument['retirado']) || $objDocumento['retirado'] === false) { - foreach ($objDocumento['componentesDigitais'] as $objComponenteDigital) { + if (!isset($objDocumento->retirado) || $objDocumento->retirado === false) { + foreach ($objDocumento->componentesDigitais as $objComponenteDigital) { $this->validaTamanhoComponenteDigital($objComponenteDigital); } } @@ -748,7 +761,11 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_null($objComponenteDigital['tamanhoEmBytes']) || $objComponenteDigital['tamanhoEmBytes'] == 0){ + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } @@ -1717,7 +1734,7 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objSerieDTO = $this->obterSerieMapeada($objDocumento); if ($objSerieDTO==null){ - throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie['codigo'].'] não encontrado.'); + throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie->codigo.'] não encontrado.'); } if (InfraString::isBolVazia($objDocumento->dataHoraDeProducao)) { @@ -2293,7 +2310,7 @@ private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) private function obterSerieMapeada($documento) { $bolPossuiDocumentoReferenciado = isset($documento->ordemDoDocumentoReferenciado); - $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie['codigo']) : self::NUM_ESPECIE_PEN_ANEXO; + $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie->codigo) : self::NUM_ESPECIE_PEN_ANEXO; return $this->objPenRelTipoDocMapRecebidoRN->obterSerieMapeada($numCodigoEspecie); } @@ -2537,12 +2554,16 @@ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtoco $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); foreach($arrDocumentos as $objDocumento){ - if (!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - $arrComponentesDigitais = $objDocumento['componentesDigitais']; + if (!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + $arrComponentesDigitais = $objDocumento->componentesDigitais; foreach ($arrComponentesDigitais as $componenteDigital) { + + if (is_array($componenteDigital)) { + $componenteDigital = (object) $componenteDigital; + } //Busca o nome do documento - $nomeDocumento = $componenteDigital['nome']; + $nomeDocumento = $componenteDigital->nome; //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); @@ -2657,9 +2678,14 @@ private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parCom //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente foreach ($arrObjDocumentos as $objDocumento) { $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { - if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { - $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + foreach ($arrObjComponentesDigitais as $objComponentesDigital) { + + if (is_array($objComponentesDigital)) { + $objComponentesDigital = (object) $objComponentesDigital; + } + + if (ProcessoEletronicoRN::getHashFromMetaDados($objComponentesDigital->hash) == $parComponentePendente) { + $tamanhoComponentePendende = $objComponentesDigital->tamanhoEmBytes; break; } } @@ -2733,11 +2759,16 @@ private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) $resultado = array(); $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach ($arrObjDocumentos as $arrDocumento) { - if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ - $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + if(isset($arrDocumento->componentesDigitais) && !is_array($arrDocumento->componentesDigitais)){ + $arrDocumento->componentesDigitais = array($arrDocumento->componentesDigitais); } - foreach ($arrDocumento['componentesDigitais'] as $objComponente) { - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + foreach ($arrDocumento->componentesDigitais as $objComponente) { + + if (is_array($objComponente)) { + $objComponente = (object) $objComponente; + } + + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); $resultado[$strHash] = $objComponente; } } @@ -2822,7 +2853,7 @@ private function criarDiretorioAnexo($parObjAnexoDTO) private function adicionarObservacoesSobreNumeroDocumento($parObjDocumento) { $arrObjObservacoes = array(); - $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor['numeroDeIdentificacao']; + $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor->numeroDeIdentificacao; if(!empty($strNumeroDocumentoOrigem)){ $objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setStrDescricao("Número do Documento na Origem: " . $strNumeroDocumentoOrigem); From 8f0ba8313f56017ef884947d5d39badbe34e4f93 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Tue, 10 Dec 2024 14:51:41 -0300 Subject: [PATCH 15/18] fix: alterar nome historico no recebimento para teste funcional --- src/rn/ExpedirProcedimentoRN.php | 2 +- src/rn/ProcessoEletronicoRN.php | 32 ++--- src/rn/ReceberProcedimentoRN.php | 7 - tests_sei4/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ tests_sei41/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ tests_super/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ 9 files changed, 18 insertions(+), 425 deletions(-) delete mode 100755 tests_sei4/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php delete mode 100755 tests_sei41/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php delete mode 100755 tests_super/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index c2832a8ed..47a82575c 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -571,7 +571,7 @@ private function atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento) return $dt1 > $dt2; }); - $objProcesso['historico'] = $arrObjOperacao; + $objProcesso['itensHistorico'] = $arrObjOperacao; return $objProcesso; } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index df373b553..fdab8a73f 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -926,13 +926,7 @@ public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $id $atribuirInformacoes = $this->atribuirInformacoesAssuntoREST($cabecalho, $dblIdProcedimento); $atribuirInfoModulo = $this->atribuirInformacoesModuloREST($cabecalho); - if (!empty($atribuirInformacoes)) { - $cabecalho = $atribuirInformacoes; - } - - if (!empty($atribuirInfoModulo)) { - $cabecalho = $atribuirInfoModulo; - } + $cabecalho['propriedadesAdicionais'] = array_merge($atribuirInformacoes, $atribuirInfoModulo); return $cabecalho; } @@ -940,16 +934,18 @@ public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $id private function atribuirInformacoesModuloREST($objCabecalho) { try{ + $arrInformacoeesModulo = []; $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); - $objCabecalho['propriedadesAdicionais'][] = [ + + $arrInformacoeesModulo[] = [ 'chave' => 'MODULO_PEN_VERSAO', 'valor' => $objInfraParametro->getValor('VERSAO_MODULO_PEN') ]; - return $objCabecalho; + return $arrInformacoeesModulo; }catch(Exception $e){ - + $mensagem = "Erro ao obter versão do módulo PEN"; throw new InfraException($mensagem, $e); } } @@ -1054,8 +1050,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $contagem++; } - $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; - return $objCabecalho; + return $arrDadosAssunto; }catch(Exception $e){ $mensagem = "Falha ao atribuir informações de assunto"; @@ -1741,9 +1736,9 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = if (isset($arrResultado['tramites']) && !empty($arrResultado['tramites'][0])) { - $historico = []; + $itensHistorico = []; foreach ($arrResultado['tramites'][0]['mudancasDeSituacao'] as $mudancaDeSituacao) { - $historico['operacao'][] = $mudancaDeSituacao; + $itensHistorico['operacao'][] = $mudancaDeSituacao; } $arrResultado['tramites'][0] = array_filter($arrResultado['tramites'][0], function($value) { @@ -1751,7 +1746,7 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = }); $arrObjTramite[] = $this->converterArrayParaObjeto($arrResultado['tramites'][0]); - $arrObjTramite[0]->historico = (object) $historico; + $arrObjTramite[0]->itensHistorico = (object) $itensHistorico; } @@ -2558,15 +2553,10 @@ public static function obterTamanhoBlocoTransferencia(){ */ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) { - return ( isset($parObjDocumento->protocoloDoProcessoAnexado) && !empty($parObjDocumento->protocoloDoProcessoAnexado) && - ( - is_array($parObjProtocolo) - ? $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado - : (is_object($parObjProtocolo) && $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado) - ) + $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado ); } diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 70886f4d8..74a3d57ad 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1862,13 +1862,6 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->getObjProtocoloDTO()->setNumIdUnidadeGeradora(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objDocumentoDTO->setStrSinBloqueado('N'); - - // if (isset($objDocumento->componenteDigital)) { - // $componentesDigitais = $objDocumento->componenteDigital; - // } else { - // $componentesDigitais = (array) $objDocumento->componentesDigitais; - // } - //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, diff --git a/tests_sei4/funcional/bootstrap.php b/tests_sei4/funcional/bootstrap.php index 2d202ecd5..9cb5fdddb 100755 --- a/tests_sei4/funcional/bootstrap.php +++ b/tests_sei4/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} diff --git a/tests_sei41/funcional/bootstrap.php b/tests_sei41/funcional/bootstrap.php index 159d03b50..df4d2e17e 100755 --- a/tests_sei41/funcional/bootstrap.php +++ b/tests_sei41/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} diff --git a/tests_super/funcional/bootstrap.php b/tests_super/funcional/bootstrap.php index 9bb6edcd3..68d9b9bd4 100755 --- a/tests_super/funcional/bootstrap.php +++ b/tests_super/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} From 72e9262c61b248fa77ba387ad5488f9a70b7e95e Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 13 Dec 2024 05:13:03 -0300 Subject: [PATCH 16/18] =?UTF-8?q?fix:=20corre=C3=A7=C3=B5es=20testes=20aut?= =?UTF-8?q?omatizados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/EnviarReciboTramiteRN.php | 8 ++++---- src/rn/ProcessoEletronicoRN.php | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/rn/EnviarReciboTramiteRN.php b/src/rn/EnviarReciboTramiteRN.php index 1e927ca56..7d4ad46b6 100755 --- a/src/rn/EnviarReciboTramiteRN.php +++ b/src/rn/EnviarReciboTramiteRN.php @@ -37,7 +37,7 @@ protected function gerarReciboTramite($numIdTramite){ $objMetaProcesso = $objMetaRetorno->metadados->processo; - $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento); + $arrObjMetaDocumento = is_array($objMetaProcesso->documentos) ? $objMetaProcesso->documentos : array($objMetaProcesso->documentos); $objDTO = new ComponenteDigitalDTO(); $objBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco()); @@ -152,11 +152,11 @@ private function obterDataRecebimentoComponentesDigitais($parObjTramite){ throw new InfraException('Parâmetro $parObjTramite não informado.'); } - if(!is_array($parObjTramite->historico->operacao)) { - $parObjTramite->historico->operacao = array($parObjTramite->historico->operacao); + if(!is_array($parObjTramite->itensHistorico->operacao)) { + $parObjTramite->itensHistorico->operacao = array($parObjTramite->itensHistorico->operacao); } - foreach ($parObjTramite->historico->operacao as $operacao) { + foreach ($parObjTramite->itensHistorico->operacao as $operacao) { if($operacao['situacao'] == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { return ProcessoEletronicoRN::converterDataSEI($operacao['dataHora']); } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index fdab8a73f..54a7576c5 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -2336,7 +2336,9 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair //Tratamento recursivo para processos anexados foreach ($arrObjProtocolo as $objProtocolo) { - $objProtocolo = (object) $objProtocolo; + if (is_array(($objProtocolo))) { + $objProtocolo = (object) $objProtocolo; + } $bolEhProcessoAnexado = $objProtocolo->staTipoProtocolo == ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; if($parBolExtrairAnexados && $bolEhProcessoAnexado){ $arrProtocolosAnexados = ProcessoEletronicoRN::obterDocumentosProtocolo($objProtocolo, $parBolExtrairAnexados); @@ -2381,12 +2383,12 @@ public static function obterComponentesDocumentos($parObjDocumento) $arrObjComponenteDigital = array(); if (isset($parObjDocumento->componentesDigitais)) { - $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } - - return $arrObjComponenteDigital; - } + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } + + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2469,7 +2471,7 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) $arrObjRefProcessosAnexados = array(); $objProcessoPrincipal = clone $parObjProtocolo; - $objProcessoPrincipal->documento = array(); + $objProcessoPrincipal->documentos = array(); $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); From 8ab6cee1b3aa240ae5ba236dde8738cefad052d8 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 18 Dec 2024 08:00:08 -0300 Subject: [PATCH 17/18] =?UTF-8?q?fix:=20Adicionar=20corre=C3=A7=C3=A3o=20d?= =?UTF-8?q?ocumento=20cancelado,=20vers=C3=B5es=20SEI:=204.1.1=20e=204.1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- src/rn/ExpedirProcedimentoRN.php | 26 +++++++++++-------- src/rn/ProcessoEletronicoRN.php | 6 +++-- .../funcional/tests/CenarioBaseTestCase.php | 1 - .../funcional/tests/CenarioBaseTestCase.php | 1 - .../funcional/tests/CenarioBaseTestCase.php | 1 - 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 00f257ac2..50032fe69 100755 --- a/Makefile +++ b/Makefile @@ -192,7 +192,7 @@ down: .env # make teste=TramiteProcessoComDevolucaoTest test-functional 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)) ; + $(CMD_COMPOSE_FUNC) run --rm php-test-functional /tests/vendor/bin/phpunit -c /tests/phpunit.xml $(textdox) /tests/tests/$(addsuffix .php,$(teste)) ; test-functional-parallel: .env $(FILE_VENDOR_FUNCIONAL) up diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 47a82575c..395448b87 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -397,7 +397,7 @@ private function obterTamanhoTotalDaBarraDeProgressoREST($parObjProcesso) { $arrHashIndexados = array(); foreach ($parObjProcesso['documentos'] as $objDoc) { - $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); + $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); foreach ($arrComponentesDigitais as $objComponenteDigital) { $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDadosREST($objComponenteDigital['hash']); if(!in_array($strHashComponente, $arrHashIndexados)){ @@ -960,24 +960,28 @@ private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parOb $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; + $componetesDigitais = []; + $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array - $documento['componentesDigitais']['ordem'] = 1; - $documento['componentesDigitais']['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $documento['componentesDigitais']['hash'] = [ + $componetesDigitais['ordem'] = 1; + $componetesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $componetesDigitais['hash'] = [ 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), 'conteudo' => $componenteDigital->getStrHashConteudo() ]; - $documento['componentesDigitais']['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); - $documento['componentesDigitais']['mimeType'] = $componenteDigital->getStrMimeType(); - $documento['componentesDigitais']['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); - $documento['componentesDigitais']['idAnexo'] = $componenteDigital->getNumIdAnexo(); - $documento['componentesDigitais'] = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); - + $componetesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $componetesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); + $componetesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $componetesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); if($componenteDigital->getStrMimeType() == 'outro'){ - $documento['componentesDigitais']['dadosComplementaresDoTipoDeArquivo'] = 'outro'; + $componetesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } + + $documento['componentesDigitais'][] = $componetesDigitais; + $componetesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + }else{ $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 54a7576c5..97bbd4a71 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -133,7 +133,7 @@ public function __construct() $this->strClientGuzzle = new Client([ 'base_uri' => $this->strBaseUri, - 'timeout' => 5.0, + 'timeout' => 10, 'headers' => $this->arrheaders, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -802,9 +802,11 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } + public function enviarProcessoREST($parametros) { $endpoint = "tramites/processo"; + try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -1040,7 +1042,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment ]; $valorInput = $infoAssunto->getStrObservacao() ? - utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1') : "NA"; $arrDadosAssunto[] = [ 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, diff --git a/tests_sei4/funcional/tests/CenarioBaseTestCase.php b/tests_sei4/funcional/tests/CenarioBaseTestCase.php index c9d4026fc..a9f22ee13 100755 --- a/tests_sei4/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei4/funcional/tests/CenarioBaseTestCase.php @@ -501,7 +501,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { diff --git a/tests_sei41/funcional/tests/CenarioBaseTestCase.php b/tests_sei41/funcional/tests/CenarioBaseTestCase.php index 241afa5d0..81f23c539 100755 --- a/tests_sei41/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei41/funcional/tests/CenarioBaseTestCase.php @@ -503,7 +503,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { diff --git a/tests_super/funcional/tests/CenarioBaseTestCase.php b/tests_super/funcional/tests/CenarioBaseTestCase.php index 6da11d142..4370fe59c 100755 --- a/tests_super/funcional/tests/CenarioBaseTestCase.php +++ b/tests_super/funcional/tests/CenarioBaseTestCase.php @@ -549,7 +549,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { From 96895f5f404f2d7da74df1adafb63afc56639ebf Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 20 Dec 2024 08:50:18 -0300 Subject: [PATCH 18/18] =?UTF-8?q?chore:=20aumentar=20timeout=20e=20remover?= =?UTF-8?q?=20n=C3=BAmero=20m=C3=A1gico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 22 +++++++++++----------- src/rn/ProcessoEletronicoRN.php | 10 ++++------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 395448b87..3c1bb807b 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -960,27 +960,27 @@ private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parOb $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; - $componetesDigitais = []; + $arrComponentesDigitais = []; $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array - $componetesDigitais['ordem'] = 1; - $componetesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $componetesDigitais['hash'] = [ + $arrComponentesDigitais['ordem'] = 1; + $arrComponentesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $arrComponentesDigitais['hash'] = [ 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), 'conteudo' => $componenteDigital->getStrHashConteudo() ]; - $componetesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); - $componetesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); - $componetesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); - $componetesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); + $arrComponentesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $arrComponentesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); + $arrComponentesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $arrComponentesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); if($componenteDigital->getStrMimeType() == 'outro'){ - $componetesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; + $arrComponentesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } - $documento['componentesDigitais'][] = $componetesDigitais; - $componetesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + $documento['componentesDigitais'][] = $arrComponentesDigitais; + $arrComponentesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); }else{ $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 97bbd4a71..b709b3397 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -133,7 +133,7 @@ public function __construct() $this->strClientGuzzle = new Client([ 'base_uri' => $this->strBaseUri, - 'timeout' => 10, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'headers' => $this->arrheaders, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -802,11 +802,9 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } - public function enviarProcessoREST($parametros) { $endpoint = "tramites/processo"; - try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -1092,7 +1090,7 @@ public function enviarComponenteDigital($parametros) $strClientGuzzle = new GuzzleHttp\Client([ 'base_uri' => $strBaseUri, 'headers' => $arrheaders, - 'timeout' => 5.0, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -1144,7 +1142,7 @@ public function enviarParteDeComponenteDigital($parametros) 'protocolo' => $protocolo ]; - $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); @@ -1160,7 +1158,7 @@ public function enviarParteDeComponenteDigital($parametros) $strClientGuzzle = new GuzzleHttp\Client([ 'base_uri' => $strBaseUri, 'headers' => $arrheaders, - 'timeout' => 5.0, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]);