<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"/>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet"/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
/>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<!-- Inclua o estilo do tema Monokai -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/monokai.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<style>
/* ==============================
= CONFIGURAÇÕES GERAIS =
=============================== */
* {
font-family: "Roboto", sans-serif;
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
}
a {
color: #42526e;
text-decoration: none;
-webkit-tap-highlight-color: transparent;
}
a:hover {
color: white;
}
li { font-size: 14px !important;
}
h3 { font-size: 14px !important;
font-weight: bold;
}
h1 { font-size: 13px !important;
}
h2 { font-size: 15px !important;
font-weight: bold;
}
td, th {
padding: 4px;
}
/* ==============================
= ESTILOS DE TÍTULOS =
=============================== */
#title-text {
display: none !important;
}
.wiki-content h1,
.wiki-content h2 {
font-family: "Roboto", sans-serif !important;
font-size: 13px!important;
}
.wiki-content h1 {
font-size: 13px !important;
}
.wiki-content h2 {
font-size: 14px !important;
color: #42526e !important;
border-bottom: 2px solid #dfe1e5;
padding-bottom: 5px;
font-weight: bold;
}
.custom-heading,
h3.custom-h3 {
font-size: 16px;
color: #42526e;
margin-bottom: 20px;
}
.custom-h1 {
color: #feac0e;
}
.explanation h2 {
font-weight: bold;
}
/* ==============================
= ESTILOS DE TEXTO =
=============================== */
.wiki-content p {
font-size: 14px !important;
}
.justificado,
.custom-justified {
text-align: justify;
margin: 10px 0;
}
/* ==============================
= ESTILOS DE LINKS =
=============================== */
.wiki-content a,
.wiki-content a:link,
.wiki-content a:visited,
.wiki-content a:focus,
.wiki-content a:active {
text-decoration: none;
color: #42526e;
font-size: 14px;
}
.wiki-content a:hover {
color: white;
}
/* ==============================
= ESTILOS DE CONTAINER =
=============================== */
.custom-content {
background-color: #f5f5f5;
padding: 20px;
border-radius: 8px;
margin: 0 10px;
max-width: 100%;
overflow: hidden;
}
.faq-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
/* ==============================
= ESTILOS DE CARDS =
=============================== */
.card {
border: 2px solid #9aa1ad;
padding: 20px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
background-color: #f4f5f7;
color: #42526e;
overflow-x: hidden;
top: 0;
}
/* ==============================
= ESTILOS DE TABS =
=============================== */
.tabs {
background-color: #dfe1e5;
}
.tabs .tab a {
color: rgb(66, 82, 110);
}
.tabs .tab a:hover,
.tabs .tab a.active,
.tabs .tab a:focus.active {
color: #6B48FF;
background-color: transparent;
}
.tabs .tab a:focus {
background-color: rgba(82, 97, 232, 0.25);
}
.tabs .tab.disabled a,
.tabs .tab.disabled a:hover {
color: rgba(16, 148, 184, 0.24);
}
.tabs .indicator {
background-color: #6B48FF;
}
.tab-content {
gap: 0;
padding: 10px;
}
.tab-content pre {
max-width: 100%;
overflow-x: hidden;
}
/* ==============================
= ESTILOS DE ÍCONES =
=============================== */
.icon-list,
.icon {
padding-left: 0;
list-style-type: none;
}
.icon {
display: inline-block;
width: 24px;
vertical-align: middle;
margin-right: 45px;
position: relative;
left: -25px;
}
.item .label i {
margin-right: 10px;
}
/* ==============================
= ESTILOS DE COMPONENTES =
=============================== */
.collapsible,
.collapsible-header,
.collapsible-body {
box-shadow: none !important;
}
.faq-question {
font-weight: bold;
margin-bottom: 5px;
}
.faq-answer {
margin-bottom: 20px;
}
.custom-list {
padding-left: 0;
margin-left: 1.5em;
}
.custom-list li {
position: relative;
padding-left: 1em;
}
ul.custom-list {
padding-left: 10px;
}
ul.custom-list li {
position: relative;
list-style-type: disc;
padding-left: 30px;
margin-bottom: 10px;
}
.item {
display: flex;
align-items: center;
padding: 10px;
border-bottom: 1px solid #eee;
}
.item:last-child {
border-bottom: none;
}
.item .label {
flex: 1;
font-weight: bold;
}
.item .value {
flex: 1;
text-align: right;
}
.item {
border-bottom: 1px solid #e0e0e0;
padding: 10px 0;
display: flex;
justify-content: space-between;
align-items: center;
}
.item:last-child {
border-bottom: none;
}
/* Estilos para o label */
.label {
font-weight: bold;
display: flex;
align-items: center;
}
.item .label i {
margin-right: 10px; /* Adiciona espaço depois dos ícones */
}
/* ==============================
= ESTILOS DE IMAGENS =
=============================== */
.imagem-responsiva {
max-width: 100%;
height: auto;
}
.custom-header-bg img {
width: 100%;
height: auto;
display: block;
}
/* ==============================
= ESTILOS DE VÍDEO =
=============================== */
#youtube-video-container iframe {
width: 100%;
height: auto;
display: block;
}
.video-container {
max-width: 800px;
margin: 0 auto;
}
.ytp-cued-thumbnail-overlay-image {
background-size: cover;
background-position: center;
width: 100%;
height: 100%;
position: absolute;
}
/* ==============================
= OUTROS ESTILOS PERSONALIZADOS =
=============================== */
.custom-content {
background-color: #f5f5f5;
padding: 20px;
border-radius: 8px;
margin: 0 10px;
max-width: 100%;
overflow: hidden;
}
.custom-heading {
font-size: 16px;
color: #42526e;
margin: 10px 0;
border-bottom: 2px solid #e0e0e0;
padding-bottom: 5px;
font-weight: bold;
}
#indice {
border-radius: 5px;
padding: 20px;
max-width: 100%;
overflow: hidden;
}
#indice h2 {
text-align: center;
margin-bottom: 16px;
}
#indice ul {
list-style-type: none;
padding-left: 0;
}
#indice li {
padding: 10px;
border-bottom: 1px solid #eee;
cursor: pointer;
transition: background-color 0.1s ease;
}
#indice li:last-child {
border-bottom: none;
}
#indice li:hover {
background-color: #6B48FF;
color: white;
}
/* ==============================
= ESTILOS DE TABELAS =
============================== */
.custom-grey {
background-color: #ffffff;
}
.custom-grey th,
.custom-grey td {
border: 1px solid #42526e;
padding: 10px;
}
.custom-grey th {
color: #fff;
background-color: #42526e;
}
.custom-grey td {
font-size: 13px;
}
.custom-grey tr:nth-child(odd) {
background-color: #e4e4e6;
}
.custom-grey tr:nth-child(even) {
background-color: #dfdfdf;
}
/* ========== FIM DO ESTILO ========= */
/* Estilo para o bloco de código */
/* Estilo para blocos de código dentro de .tab-content */
.highlight-container pre code {
background-color: #2d2d2d; /* Cor de fundo escuro */
color: #f8f8f2; /* Cor do texto claro */
padding: 10px; /* Espaçamento interno */
border-radius: 5px; /* Bordas arredondadas */
overflow-x: auto; /* Barra de rolagem horizontal se necessário */
font-family: 'Courier New', Courier, monospace; /* Fonte do código */
}
/* Estilo para a tag <pre> dentro do contêiner */
.highlight-container pre {
margin: 20px 0; /* Margem acima e abaixo do bloco de código */
padding: 0; /* Sem preenchimento extra */
}
</style>
<!-- Tabs e conteúdo das guias -->
<div class="card">
<ul class="tabs">
<li class="tab col s4"><a href="#tab1">DETALHES FUNCIONAIS</a></li>
<li class="tab col s4"><a href="#tab2">DETALHES TÉCNICOS</a></li>
<li class="tab col s4"><a href="#tab3">FAQ</a></li>
</ul>
<!-- Tab Content -->
<div id="tab1" class="col s12">
<div class="tab-content">
<div style="background-color: #f4f5f7; padding: 10px; margin-left: 50px; margin-right: 50px;">
<section id="section1" style="margin-top: 40px;">
<!-- Tab 70 conteúdo -->
<!-- Segundo Card -->
<!-- Primeiro Card -->
<!-- Primeiro Card -->
<div class="card">
<div class="item">
<span class="label">
<table border="1">
<tr>
<td><i class="fas fa-tags"></i> Produto:</td>
<td>Automação da Força de Vendas</td>
</tr>
<tr>
<td><i class="fas fa-link"></i> Linha de Produto:</td>
<td>TOTVS CRM</td>
</tr>
<tr>
<td><i class="fas fa-chart-pie"></i> Segmento:</td>
<td>Cross Segmentos</td>
</tr>
<tr>
<td><i class="fas fa-desktop"></i> Módulo:</td>
<td>Configuração - Sincronização > Dispositivos
</td>
</tr>
<tr>
<td><i class="fas fa-globe"></i> Aplicação:</td>
<td>Web/app móvel</td>
</tr>
<tr>
<td><i class="fas fa-hashtag"></i> Identificador:</td>
<td>DTSFAPD-2452 - DTSFAPD-2453 </td>
</tr>
</table>
</span>
</div>
</div>
<br>
<!-- Segundo Card -->
<h2 class="custom-heading">
<i class="fa-solid fa-eye"></i>    VISÃO GERAL
</h2>
<p class="justificado">
A melhoria aprimora a segurança e o gerenciamento de dispositivos no ambiente mobile. Com esta atualização, é possível controlar quais dispositivos têm permissão para acessar a aplicação, permitindo bloqueios e gerenciamento detalhado de cada dispositivo.
</p>
<br>
<h2 class="custom-heading">
<i class="fa-solid fa-rocket"></i>    OBJETIVO
</h2>
<p class="justificado">
O principal objetivo é oferecer aos administradores de acesso a capacidade de gerenciar e controlar quais dispositivos podem sincronizar com o sistema. Isso inclui a possibilidade de bloquear dispositivos já cadastrados e gerenciar o acesso de novos dispositivos.
</p>
<!-- ... (seu conteúdo existente) ... -->
<h2 class="custom-heading">
<i class="fa-solid fa-book"></i>   ANTES DE COMEÇAR
</h2>
<h3>Requisitos</h3>
<p>A funcionalidade afeta o gerenciamento de dispositivos no TOTVS CRM SFA.</p>
<p>Parâmetro disponível sob a seção de sincronização de dispositivos.</p>
</section>
<section id="section2" style="margin-top: 40px;">
<h2 class="custom-heading"><i class="fa-solid fa-star"></i>  DETALHES FUNCIONAIS</h2>
<h3>Funções </h3>
<ol>
<li>Controle de acesso para novos dispositivos baseado no parâmetro "sim3g.dispositivo.bloqueio.novo"</li>
<li>Possibilidade de bloquear dispositivos e impedir novas sincronizações.</li>
<li>Use a opção "Bloqueio permanente" para controlar o acesso dos dispositivos.</li>
<li>Integração com o cadastro de profissionais para sugerir bloqueio de dispositivos ao inativar um usuário.</li>
</ol>
</section>
<section id="section3" style="margin-top: 40px;">
<h2 class="custom-heading"><i class="fa-solid fa-shoe-prints"></i>  COMO USAR?</h2>
<h3> Passo a Passo</h3>
<ol><li><p><strong>Configuração do Parâmetro para Novos Dispositivos:</strong></p><ul><li>Ajuste o parâmetro "sim3g.dispositivo.bloqueio.novo" para controlar automaticamente o acesso de novos dispositivos que se conectam ao sistema pela primeira vez.</li></ul></li><li><p><strong>Gerenciamento de Dispositivos no Cadastro Geral:</strong></p><ul><li>Acesse a tela "Cadastro > Geral > Dispositivo" no TOTVS CRM SFA. Aqui, você pode visualizar e gerenciar tanto os dispositivos novos quanto os já existentes.</li></ul></li><li><p><strong>Uso da Opção 'Bloqueio Permanente':</strong></p><ul><li>Utilize o campo "Bloqueio permanente" disponível para cada dispositivo listado para controlar o acesso de dispositivos específicos. Marque como "Sim" para bloquear ou "Não" para permitir o acesso.</li></ul></li></ol>
<br>
<p>
<video autoplay loop muted style="width: 100%; height: auto; max-width: 100%; display: block;">
<source src="https://totvscrm.com/wp-content/uploads/2024/01/SQLcompressaomp4.mp4" type="video/mp4">
</video>
</p><br>
</section>
<section id="section4" style="margin-top: 40px;">
<h2 class="custom-heading"><i class="fa-solid fa-signs-post"></i>  EXEMPLO PRÁTICO</h2>
<b>Desafio Antigo:</b>
<p>Dificuldade em controlar e gerenciar o acesso de dispositivos específicos ao sistema TOTVS CRM SFA.
</p>
<br>
<b>Solução Atualizada:</b>
<p>Com a nova funcionalidade, os administradores podem agora gerenciar de forma eficiente o acesso dos dispositivos, oferecendo maior segurança e controle sobre a utilização da aplicação.
</p>
<br>
</p>
</section>
</div>
<!-- Tab 30 fim -->
<!-- Tab 30 fim -->
</div>
</div>
<div id="tab2" class="col s12">
<div class="tab-content">
<div style="background-color: #f4f5f7; padding: 20px; margin-left: 50px; margin-right: 50px;">
<section id="section5" style="margin-top: 40px;">
<!-- Primeira coluna do conteúdo da guia 2 -->
<h2 class="custom-heading"><i class="fa-solid fa-gear"></i>  DETALHES TÉCNICOS</h2>
<ol><li><p><b>Banco de Dados</b></p>
<ul><li><strong>• Tools, Opção 3</strong>: No sistema, adicionar na tabela 'wssynclog' a coluna 'iddispositivo', que é uma FK para a tabela 'dispositivo', e pode ser nula.</li>
<li><strong>• Tools, Opção 5</strong>: Criar um novo registro na tabela 'parâmetro' seguindo o especificado no changeSet fornecido, detalhando as características do novo parâmetro relacionado ao bloqueio de dispositivos.</li></ul></li>
<br>
<div style="background-color: #2d2d2d; padding: 10px; border-radius: 5px;">
<pre style="margin: 0; overflow-x: auto;"><code class="language-xml" style="color: #f8f8f2; font-family: 'Courier New', Courier, monospace;">
<changeSet <changeSet author="systemScript" failOnError="false" id="" runOnChange="true">>
<insert tableName="parametro"><preConditions onError="HALT" onFail="MARK_RAN" onSqlOutput="IGNORE">
<column name="idparametro" valueSequenceNext="SEQPKPARAMETRO"/>
<customPrecondition className="com.wealthsystems.sim3g.dao.hibernate.api.liquibase.custom.precondition.RegisterExistsPrecondition">
<column<param name="idnativotable" valueComputedvalue="1TipoAprovacao"/>>
<column <param name="idnespecializacolumn" valueComputedvalue="0sglTipoAprovacao"/>>
<column name="idnpermitealteracao" valueComputed="0"/>
<column <param name="chavevalue" valueComputedvalue="'sim3g.dispositivo.bloqueio.novoPEDIDO_BLOQUEIO'"/>>
<column name="descricao" valueComputed="'Parâmetro que define se novos dispositivos devem ser bloqueados de sincronizar, por padrão.'/></customPrecondition>
</preConditions>
<column name<insert tableName="observacao" valueComputed="'Valores aceitáveis: 0 para liberar a sincronização de novos dispositivos. 1 para bloquear a sincronização de novos dispositivos'"/>tipoaprovacao">
<column<column name="valoridtipoaprovacao" valueComputedvalueSequenceNext="'0'SEQPKTIPOAPROVACAO"/>>
<column<column name="valorminimodescricao" valueComputed="'0'"/>
<column name="valormaximo" valueComputed="'0'"/>Aprovação vinculada a tipos de bloqueios que requerem aprovação'"/>
<column<column name="sglcontextosgltipoaprovacao" valueComputed="'dispositivoPEDIDO_BLOQUEIO'"/>>
<column<column name="sglmoduloidnativo" valueComputed="'Geral'1"/>>
<column<column name="sglambientecodigoerp" valueComputed="'Todos'null"/>>
<column<column name="sglorigemcodigo" valueComputed="'XML'null"/>>
<column<column name="codigoerpobservacao" valueComputed="null"/>>
<column<column name="wsversao" valueComputed="null"/>>
</insert></insert>
<comment></comment>
</changeSet>
<<comment></comment>
</code></pre>
</div> <br>
<li><p><b>Banco de DadosRefatoração de tela de cadastro dispositivo</b></p>
<ul><li><b>• A tela "Cadastro > Geral > Dispositivo" deverá possuir grid com as seguintes especificações:</b>
<li>◦ "Descrição": Campo textual, editável, default vazio. Persistência no campo dispositivo.descricao</li>
<li>◦ "Marca": Campo textual, não editável, inserido pela sincronização persistindo a informação da marca do dispositivo. Persistência no campo dispositivo.marca</li>
<li>◦ "Modelo": Campo textual, não editável, inserido pela sincronização persistindo a informação do modelo do dispositivo. Persistência no campo dispositivo.modelo</li>
<li>◦ "ID": Campo textual, não editável, inserido pela sincronização persistindo a informação do "AndroidId" do dispositivo. Persistência no campo dispositivo.identificador</li>
<li>◦ "Telefone": Campo numérico, editável, máscara de telefone. Persistência no campo dispositivo.numero</li>
<li>◦ "Profissional": Campo pesquisa, não editável, exibindo nome do usuário associado ao dispositivo. Dispositivos que não autenticaram corretamente com um usuário, não devem ser cadastrados. A intenção é que esse campo nunca seja vazio. Persistência no campo dispositivo.idusuario</li>
<li>◦ "Veículo": Campo pesquisa, editável, buscando a entidade veiculo, exibindo somente registros ativos. Persistência no campo dispositivo.idveiculo</li>
<li>◦ "Última transmissão": Campo textual, não editável, exibindo data/hora da última sincronização associada ao dispositivo. Persistência no campo dispositivo.ultimatransmissao</li>
<li>◦ "Situação": Campo check-box, editável, opções Sim/Não. Ao sincronizar, caso o dispositivo estiver inativado o dispositivo será atualizado para ativo. O bloqueio do dispositivo deverá acontecer somente pelo campo "Bloqueado". Persistência no campo dispositivo.idnativo</li>
<li>◦ "Sistema Operacional": Campo textual, não editável, inserido pela sincronização persistindo a informação do SO do dispositivo. Persistência no campo dispositivo.sistemaoperacional</li>
<li>◦ "Versão": Campo textual, não editável, inserido pela sincronização persistindo a informação do número da versão do SO do dispositivo. Persistência no campo dispositivo.versaoso</li>
<li>◦ "Bloqueado": Campo check-box, editável, opções Sim/Não. Persistência no campo dispositivo.idnbloqueiopermanente</li>
</ul></ul>
</li>
<ul><li>• <b>A tela deverá receber os seguintes novos filtros avançados:</b>
<li>◦ "Usuário": campo de pesquisa, múltipla escolha, exibindo usuarios ativos. Ao selecionado, fará filtragem pelo campo dispositivo.idusuario</li>
<li>◦ "Situação": Checkbox, com opções: "Ativo" e "Inativo". Somente a opção Ativo deve vir marcada por padrão. Ao carregar a tela, somente deverão ser exibidos registros de dispositivos ativos. Ao selecionado, fará filtragem pelo campo dispositivo.idnativo</li>
<li>◦ "Bloqueado": Checkbox, com opções "Sim" e "Não". As duas opções devem vir marcadas por padrão. Ao selecionado, fará filtragem pelo campo dispositivo.idnbloqueiopermanente</li>
</ul>
<ul><li>• <b> Ao sincronizar, caso a combinação dos campos dispositivo.identificador + dispositivo.idusuario não esteja cadastrada no sistema, o sistema deverá adicionar novo registro na tabela dispositivo. Caso a combinação dos campos dispositivo.identificador + dispositivo.idusuario esteja cadastrada no sistema, o sistema deverá atualizar o registro de dispositivo.</b></li>
<li>◦ Em ambos os casos, os seguintes campos deverão ser atualizados:</li>
<ul>
<li>◦ Marca</li>
<li>◦ Modelo</li>
<li>◦ Última transmissão</li>
<li>◦ Situação</li>
<li>◦ Sistema Operacional</li>
<li>◦ Versão</li>
</ul>
</li>
</ul>
<br>
<li><p><b>• Vinculação de dispositivos com controle de sincronização (wssynclog)</b></p>
<ul><li>◦ Ao sincronizar, autenticando com sucesso, ao persistir o registro de log na tabela wssynclog, o sistema deverá popular a coluna wsynclog.iddispositivo, buscando o iddispositivo pela consulta a seguir:</li>
</ul>
<div style="background-color: #2d2d2d; padding: 10px; border-radius: 5px;">
<pre style="margin: 0; overflow-x: auto;"><code class="language-xml" style="color: #f8f8f2; font-family: 'Courier New', Courier, monospace;">
/*
select iddispositivo from dispositivo where identificador = ${AndroidID} and idusuario = ${wssynclog.idusuario}
*/
</code></pre>
</div> <br>
<ul><li>◦ Caso não seja encontrado, um novo dispositivo deverá ser persistido na tabela dispositivo.</li>
</ul>
<ul><li>◦ Caso o parâmetro "sim3g.dispositivo.bloqueio.novo" estiver com valor 1,</li>
</ul>
<ul><li>◦ O campo dispositivo.idnbloqueiopermanente deverá ser persistido como 1.</li>
</ul>
Caso contrário,
<ul><li>◦ O campo dispositivo.idnbloqueiopermanente deverá ser persistido como 0.</li>
</ul>
<br>
<li><p><b>Sugestão de bloqueio de usuários inativados</b></p>
<ul><li><p><b>• Na tela de cadastro de profissionais,</li></p> </b></ul>
<ul><li>◦ Ao inativar um profissional e clicar em gravar,</li>
</ul>
<ul><li>◦ O sistema deverá consultar se existem dispositivos ativos ("Bloqueio permanente" = "Não") associados a ele, através da consulta a seguir:</li>
</ul>
<div style="background-color: #2d2d2d; padding: 10px; border-radius: 5px;">
<pre style="margin: 0; overflow-x: auto;"><code class="language-xml" style="color: #f8f8f2; font-family: 'Courier New', Courier, monospace;">
/* select iddispositivo from dispositivo where idusuario = ? and idnbloqueiopermanente = 0 */
</code></pre>
</div> <br>
<ul><li><p><b>• Se retornarem registros , o sistema deverá exibir pop-up de confirmação (Sim/Não), com a pergunta: "O profissional foi inativado, deseja bloquear os seus dispositivos associados?".</li></p> </b></ul>
<ul><li>◦ Caso selecionado "Sim", o sistema deverá atualizar a tabela de dispositivos do usuário, marcando o campo como "Bloqueio permanente" = "Sim"</li>
</ul>
<div style="background-color: #2d2d2d; padding: 10px; border-radius: 5px;">
<pre style="margin: 0; overflow-x: auto;"><code class="language-xml" style="color: #f8f8f2; font-family: 'Courier New', Courier, monospace;">
/* update dispositivo set idnbloqueiopermanente = 1 where idusuario = ? */
</code></pre>
</div> <br>
<li><p><b>Implementação de bloqueio de dispositivos</b></p>
<ul><li><p><b>• Ao sincronizar, autenticando com sucesso,</li></p> </b></ul>
<ul><li>◦ Caso o aparelho contenha dados,</li>
</ul>
<ul><li><p><b>• Caso o dispositivo associado à sincronização (Ponto 3) possua o campo dispositivo.idnbloqueiopermanente = 1,</li></p> </b></ul>
<ul><li>◦ O sistema deverá receber os dados do aparelho (Aparelho > Servidor), porém, na etapa de receber dados (Servidor > Aparelho), o sistema deverá notificar o usuário com a seguinte mensagem: "O aparelho foi bloqueado para utilização do sistema e terá seus dados removidos".</li>
</ul>
<ul><li>◦ Após a mensagem, o sistema deverá ter excluido todos os dados (DATS) do aparelho, encaminhando o usuário para a tela de login.</li>
</ul>
<ul><li>◦ Caso contrário,</li>
</ul>
<ul><li>◦ O sistema deverá executar a sincronização normalmente, sem bloqueios.</li>
</ul>
<ul><li><p><b>• Caso o aparelho não contenha dados,</li></p> </b></ul>
<ul><li>◦ Caso o dispositivo associado à sincronização (Ponto 3) possua o campo dispositivo.idnbloqueiopermanente = 1,</li>
</ul>
<ul><li>◦ O sistema deverá cancelar a sincronização após a autenticação, e notificar o usuário com a seguinte mensagem: "O aparelho está bloqueado para utilização do sistema. Solicite liberação ao responsável, informando o código do dispositivo a seguir: ${AndroidID com opção para copiar o conteúdo para a clipboard}".</li>
</ul>
<ul><li><p><b>• Caso contrário,</li></p> </b></ul>
<ul><li>◦ O sistema deverá executar a sincronização normalmente, sem bloqueios.</li>
</ul>
</ol>
<!-- Second Card -->
</div>
</div>
</div>
<div id="tab3" class="col s12">
<div class="tab-content">
<div style="background-color: #f4f5f7; padding: 20px; margin-left: 50px; margin-right: 50px;">
<!-- Primeira coluna do conteúdo da guia 2 -->
<div class="container">
<h2 class="custom-heading"><i class="fa-solid fa-circle-question"></i> PERGUNTAS FREQUENTES</h2>
<ul class="collapsible">
<li>
<div class="collapsible-header"><i class="material-icons">question_answer</i>Posso desbloquear um dispositivo depois de marcá-lo como permanentemente bloqueado?</div>
<div class="collapsible-body"><span>Sim, você pode alterar o status de "Bloqueio Permanente" para "Não" para permitir novamente a sincronização do dispositivo.
</span></div>
</li>
<!-- Adicione mais perguntas e respostas aqui conforme necessário -->
</ul>
</div>
<!-- Primeira coluna do conteúdo da guia 2 -->
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script>
// Inicialização das tabs
document.addEventListener("DOMContentLoaded", function () {
var tabs = document.querySelectorAll(".tabs");
M.Tabs.init(tabs);
});
</script>
<script>
const items = document.querySelectorAll("#indice li");
items.forEach(item => {
item.addEventListener('click', (e) => {
const targetId = e.target.getAttribute('data-target');
const targetElement = document.getElementById(targetId);
window.scrollTo({
top: targetElement.offsetTop - 10,
behavior: "smooth"
});
});
});
</script> <script src="https://kit.fontawesome.com/c97d4c197a.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
<script src="scripts.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var elems = document.querySelectorAll('.collapsible');
var instances = M.Collapsible.init(elems);
});
</script>
<script>
document.addEventListener('DOMContentLoaded', (event) => {
hljs.highlightAll();
});
</script>
|