HTML |
---|
<style>
/* Início estilo banner */
.compositiondani-banner {
position: relative;
min-height: 220px;
border-radius: 5px;
margin-bottom: 5px;
overflow: hidden;
}
.compositiondani-banner-image {
background-image: url("https://totvscrm.com/wp-content/uploads/2023/08/capa-com-fundo-e-sem-icone-TDN21.png");
background-size: cover;
min-height: inherit;
width: 100%;
}
.compositiondani-banner-overlay {
min-height: inherit;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 5px;
pointer-events: none;
}
.compositiondani-banner-logo-container {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 50%;
left: 50%;
bottom: 0;
transform: translate(-50%, -50%);
}
.compositiondani-banner-logo {
width: 350px;
height: 180px;
background-image: url("https://totvscrm.com/wp-content/uploads/2023/08/logo.png");
background-size: contain;
background-repeat: no-repeat;
}
.compositiondani-banner-title {
margin-bottom: 10px !important;
padding: 10px !important;
background: rgba(0, 0, 0, 0.5) !important;
display: flex !important;
justify-content: center !important;
align-items: center !important;
font-size: 12px !important;
line-height: 1.3 !important;
max-height: 133px !important;
font-family: "Roboto", sans-serif !important;
-webkit-line-clamp: 3 !important;
-webkit-box-orient: vertical !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
color: #ffffff !important;
position: relative !important;
margin-top: 130px !important;
border-radius: 10px !important;
}
.compositiondani-banner-content {
position: absolute;
padding: 30px;
max-width: 60%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1;
color: white;
text-align: center;
}
.custom-header h1 {
font-size: 16px;
background-color: rgba(0, 0, 0, 0.6);
padding: 10px;
border-radius: 5px;
margin: 0;
}
.negrito-materialize {
font-weight: bold;
}
.custom-margin-justified {
margin: 0 20px;
text-align: justify;
}
/* Final estilo banner */
/* Final estilo banner */
#content.page.view {
padding-right: 0 !important;
} /* impedir vermelho no nav */
#breadcrumb-section > nav {
background-color: initial !important;
box-shadow: none !important;
}
@media only screen and (min-width: 601px) {
nav,
nav .nav-wrapper i,
nav a.sidenav-trigger,
nav a.sidenav-trigger i {
height: auto !important;
line-height: normal !important;
}
}
/* final vermelho no nav */ </style>
<header>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet"/>
<div class="compositiondani-banner">
<div class="compositiondani-banner-image"></div>
<div class="compositiondani-banner-overlay"></div>
<div class="compositiondani-banner-logo-container">
<div class="compositiondani-banner-logo"></div>
</div>
<div class="compositiondani-banner-content">
<h1 class="compositiondani-banner-title">PROVAÇÃO DE PEDIDOS POR BLOQUEIO DE CLIENTES</h1>
</header>
</div>
</div> |
HTML |
---|
<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>Venda/Aprovação
</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-2399 </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 última atualização introduziu o parâmetro de aprovação de pedidos mediante o bloqueio de clientes. Esta inovação possibilita que os bloqueios, anteriormente associados aos cadastros de clientes, sejam automaticamente validados durante o processo de venda. Assim, quando um pedido de um cliente com bloqueio cadastrado é feito, ele é automaticamente encaminhado para um processo de aprovação, exigindo a análise de um usuário autorizado antes de ser finalizado.
</p>
<br>
<h2 class="custom-heading">
<i class="fa-solid fa-rocket"></i>    OBJETIVO
</h2>
<p class="justificado">
O objetivo desta atualização é aprimorar o controle de vendas, especialmente em casos de clientes com restrições cadastradas. A funcionalidade busca garantir que pedidos realizados para clientes bloqueados passem por um processo de verificação e aprovação adicional, aumentando a segurança e a conformidade nas transações comerciais.
</p>
<br>
<!-- ... (seu conteúdo existente) ... -->
<h2 class="custom-heading">
<i class="fa-solid fa-book"></i>   ANTES DE COMEÇAR
</h2>
<h3>Requisitos</h3>
<p>Essencial realizar a configuração do bloqueio no cadastro de clientes para ativar a funcionalidade.</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>Implementação de um parâmetro para vincular o cadastro de bloqueios de clientes à aprovação de pedidos.</li>
<li>A funcionalidade é ativada marcando a opção "Requer aprovação" como "sim" no cadastro de bloqueios dos clientes.</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><b>Ativar 'PEDIDO_BLOQUEIO' no Cadastro de Venda:</b></p><ul><li>Acesse a seção "Tipo de Aprovação" e ative o registro <code>PEDIDO_BLOQUEIO</code>.</li></ul></li><li><p><b>Configurar Tipos de Bloqueio:</b></p><ul><li>Em "Tipo Bloqueio", adicione os bloqueios que serão aplicados aos clientes.</li></ul></li><li><p><b>Aplicar Bloqueio ao Cliente:</b></p><ul><li>No cadastro do cliente, vá à aba "Bloqueio" e adicione o bloqueio configurado.</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/tdnbloqueiootimizado.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 vendas para clientes com restrições, devido à ausência de um mecanismo automatizado de aprovação de pedidos.
</p>
<br>
<b>Solução Atualizada:</b>
<p>Com o novo recurso, pedidos para clientes com bloqueios que exigem aprovação são automaticamente enviados para um processo de verificação e autorização, proporcionando um controle mais efetivo e seguro nas transações comerciais.
</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><strong>Tools, Opção 3</strong>: Adicionar campo 'idtipoaprovacao' (FK para a tabela 'tipoaprovacao', nullable) na tabela 'tipobloqueio'.</p></li>
<li><p><strong>Tools, Opção 18</strong>: Criar tipo de aprovação conforme configuração abaixo:</p></li>
<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 author="systemScript" failOnError="false" id="" runOnChange="true">
<preConditions onError="HALT" onFail="MARK_RAN" onSqlOutput="IGNORE">
<customPrecondition className="com.wealthsystems.sim3g.dao.hibernate.api.liquibase.custom.precondition.RegisterExistsPrecondition">
<param name="table" value="TipoAprovacao"/>
<param name="column" value="sglTipoAprovacao"/>
<param name="value" value="'PEDIDO_BLOQUEIO'"/>
</customPrecondition>
</preConditions>
<insert tableName="tipoaprovacao">
<column name="idtipoaprovacao" valueSequenceNext="SEQPKTIPOAPROVACAO"/>
<column name="descricao" valueComputed="'Aprovação vinculada a tipos de bloqueios que requerem aprovação'"/>
<column name="sgltipoaprovacao" valueComputed="'PEDIDO_BLOQUEIO'"/>
<column name="idnativo" valueComputed="1"/>
<column name="codigoerp" valueComputed="null"/>
<column name="codigo" valueComputed="null"/>
<column name="observacao" valueComputed="null"/>
<column name="wsversao" valueComputed="null"/>
</insert>
<comment></comment>
</code></pre>
</div>
<br>
<li><p><b>Interface Web - "Cadastro > Geral > Tipo bloqueio"</b>:</p><ul><li>Remover coluna "Requer autorização".</li><li>Adicionar coluna "Tipo aprovação", editável somente se "Requer aprovação" = Sim. Associar à 'tipobloqueio.idtipoaprovacao'.</li></ul></li>
</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>O que é a funcionalidade 'Aprovação de Pedidos por Bloqueio de Clientes'?</div>
<div class="collapsible-body"><span>É uma atualização no TOTVS CRM que permite que pedidos de clientes com bloqueios cadastrados sejam automaticamente enviados para aprovação antes da finalização.
</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>
|
...
TOTVS CRM Automação da Força de Vendas
...
Linha TOTVS CRM
...
Jira | ||||||
---|---|---|---|---|---|---|
|
Para que seja possível incluir outros tipos de campos nos formulários, será necessário implementar campos adicionais para o contexto de Formulários, de forma que seja possível criar facilmente novas possibilidades de campos para os formulários, permitindo ainda a reutilização dos campos customizados em mais de um mesmo formulário.
Estes campos adicionais devem ser cadastrados na tela de cadastro de campos adicionais da ferramenta (Cadastro -> Geral -> Campos Adicionais), onde deve haver um novo tipo de contexto, chamado “FORMULARIO”.
...
Protótipo
Nos campos adicionais, será necessário criar uma nova busca para o tipo de campo “Pesquisa em Entidade”, chamado “Entidade Genérica”, o qual permitirá a utilização de Consulta SQL em banco de dados, para que seja possível criar campos customizados, usando as informações do sistema.
Ao utilizar esta nova busca, a aplicação apresentará alguns novos campos na tela de cadastro de campos adicionais, para que seja possível informar a fonte dos dados para a consulta, adicionar as consultas SQL, confirmar a consulta, pré-visualizar os resultados da consulta, validar entrada de dados, permitir utilização de filtro de usuário logado e confirmação do campo adicional.
Segue abaixo o detalhamento dos itens a serem criados:
Será necessário implementar um novo tipo de busca para campos adicionais do tipo Pesquisa em Entidade, chamado “Entidade Genérica”, a qual vai ser apresentada inicialmente para campos do contexto de Formulário.
A busca de entidade genérica permitirá ao usuário que selecione a fonte de dados de consulta da entidade, assim como permitirá que o usuário informe uma consulta SQL customizada, para a definição das informações que serão utilizadas neste campo adicional.
Portanto, ao selecionar essa nova opção “Entidade Genérica”, devem ser apresentados os campos “Base de dados” e “Consulta”, conforme descrito a seguir.
...
Protótipo
Será necessário implementar um novo campo para a busca por Entidade Genérica, onde será possível selecionar a base de dados a ser utilizada na busca das informações do campo adicional.
Este campo terá o seu comportamento similar ao campo de seleção de Base de Dados da tela de cadastro de indicadores do SFA.
...
Protótipo
Será necessário implementar um novo campo para as entidades Genéricas, para que seja possível selecionar a Consulta que será utilizada para buscar as informações do campo adicional.
Este campo terá o seu comportamento similar ao campo de seleção de Base de Dados da tela de cadastro de indicadores da ferramenta, onde o usuário poderá selecionar alguma consulta, ou poderá utilizar as configurações avançadas, para informar a sua consulta SQL customizada.
...
Protótipo
Será necessário implementar um campo, onde o usuário poderá incluir as consultas SQL, que trarão os dados para o campo adicional.
Este campo será implementado de maneira similar ao existente no cadastro de indicadores de BI, respeitando inclusive as seguintes características:
...
Protótipo
Será necessário implementar a utilização de “campos adicionais” nas perguntas dos Formulários, de forma que o usuário possa utilizar em seus formulários os campos adicionais previamente criados.
Na tela de edição de formulários, dentro do cadastro de perguntas, será necessário implementar um novo “Tipo da Pergunta”, onde haverá a opção “Campo Adicional”. Essa opção abrirá um novo campo ao usuário, onde ele poderá selecionar um dos campos adicionais cadastrados para o contexto de formulários.
Será necessário implementar uma nova opção para o Tipo da Pergunta dos formulários chamada “Campo Adicional”, a qual ao ser selecionada, abrirá um novo campo, para a seleção do adicional desejado.
...
Protótipo
Nova opção no cadastro de Tipo da Pergunta do formulário
Será necessário implementar um novo campo no cadastro de perguntas do formulário, onde o usuário poderá selecionar qual o campo adicionar que deseja incluir no formulário.
Este campo será apresentado apenas quando o tipo de pergunta selecionada tenha sido “Campo Adicional”.
Quando apresentado em tela, o preenchimento de campo é obrigatório.
...
Protótipo
Campo para seleção do campo adicional para o Formulário
Será necessário implementar a pré-visualização do campo adicional na tela de edição de formulários, de modo que seja possível pré-visualizar as opções que serão apresentadas no campo.
A pré-visualização dos campos adicionais será similar à pré-visualização das perguntas do tipo “Campos cadastrados”, onde ao clicar sobre a lupa na lateral direita do campo, será apresentada uma popup com a lista de resultados do campo, permitindo inclusive a filtragem dos resultados pela descrição (Valor) do campo.
Nessa popup, será apresentado o conteúdo definido na coluna “valor” do campo adicional.
...
Protótipo
Popup de visualização dos dados que o campo adicional está retornando.
Será necessário implementar o campo adicional do tipo Consulta SQL na tela de “responder formulário” da Web do SFA.
Ao carregar a tela de responder, a aplicação efetuará a consulta SQL no banco de dados para gerar as opções do campo, apresentando em tela o Valor encontrado para cada um dos registros.
Os campos adicionais serão apresentados de maneira similar aos campos do tipo “Campos cadastrados”, onde ao clicar sobre a lupa na lateral direita do campo, será apresentada uma popup com a lista de resultados do campo, permitindo inclusive a filtragem dos resultados pela descrição (Valor) do campo.
Nessa popup, será apresentado o conteúdo definido na coluna “valor” do campo adicional.
Quando a aplicação for registrar em banco as respostas destes campos adicionais, deve ser armazenado em banco tanto a Chave quanto o Valor do registro que foi selecionado no formulário, permitindo assim a posterior visualização das respostas incluídas pelo profissional.
...
Protótipo
Exibição do campo complementar do tipo Consulta SQl
Popup com a lista de opções do campo adicional Consulta SQL, apresentando o Valor.
Será necessário implementar a visualização do campo adicional do tipo Consulta SQL na tela de “Visualizar Formulários Enviados” da Web do SFA.
Ao carregar a tela de visualização das respostas, a aplicação deve resgatar no banco de dados as informações registradas para o campo adicional, apresentando em tela a descrição do registro (Valor) conforme o que está registrado na resposta do banco de dados.
Como a Consulta SQL pode ter sido totalmente customizada, e a Chave também pode ter sido customizada, a aplicação NÃO deve realizar uma nova Consulta SQL para buscar a descrição do registro, devendo simplesmente apresentar a descrição do registro selecionado.
...
Protótipo
Visualização do campo adicional na tela de Visualização de Formulários Enviados
Será necessário implementar a sincronização de campos adicionais do tipo Consulta SQL para o Android, de forma que estes campos possam ser utilizados de forma offline no Android.
Para isso, durante a sincronização, devem ser preparadas as opções selecionáveis do campo através de “views”, onde essas opções serão armazenadas dentro de um novo DATS do aparelho.
Dessa forma, será possível utilizar os formulários com perguntas geradas a partir de consultas SQL, uma vez que a consulta foi realizada no momento da sincronização, e o seu resultado está permitido na memória do aparelho.
A cada nova sincronização, as opções selecionáveis serão atualizadas, de forma que elas sempre estejam atualizadas no aparelho do usuário.
Será necessário implementar o campo adicional do tipo Consulta SQL na tela de “responder formulário” do APP Mobile do SFA.
Ao carregar a tela de responder, a aplicação efetuará a busca a busca das opções do campo de maneira offline, através dos registros presentes na tabela/entidade criada durante a sincronização dos dados.
Como a sincronização atualiza os dados do campo adicional a cada nova sincronização, as informações que estão sendo visualizadas pelo profissional no campo adicional se referem ao momento em que a sincronização foi realizada, assim como ocorre com os demais dados do SFA. Não haverá consulta online para gerar os dados do campo adicional em tempo de execução no APP Mobile.
Os campos adicionais serão apresentados de maneira similar aos campos do tipo “Campos cadastrados”, onde ao clicar sobre o campo, será apresentada uma popup com a lista de resultados do campo, permitindo inclusive a filtragem dos resultados pela descrição (Valor) do campo.
Nessa popup, será apresentado o conteúdo definido na coluna “valor” do campo adicional.
Quando a aplicação for registrar em banco as respostas destes campos adicionais, deve ser armazenado em banco tanto a Chave quanto o Valor do registro que foi selecionado no formulário, permitindo assim a posterior visualização das respostas incluídas pelo profissional.
...
Protótipo
Campo adicional com tipo Consulta SQL no Android, com a popup de opções.
Será necessário implementar a visualização do campo adicional do tipo Consulta SQL na tela de “Visualizar Formulários Enviados” do APP Mobile do SFA.
Ao carregar a tela de visualização das respostas, a aplicação deve resgatar no banco de dados as informações registradas para o campo adicional, apresentando em tela a descrição do registro (Valor) conforme o que está registrado na resposta do banco de dados/memória do aparelho.
Como a Consulta SQL pode ter sido totalmente customizada, e a Chave também pode ter sido customizada, a aplicação NÃO deve realizar uma nova Consulta SQL para buscar a descrição do registro, devendo simplesmente apresentar a descrição do registro selecionado.
...
Protótipo
Visualização campo adicional SQL respondido - Android.
Bloco de código |
---|
/* select idconexao as chave, descricao as valor from consulta where idnativo = 1 */ |
Bloco de código |
---|
/* select idconexao as chave, descricao as valor from conexao where idnativo = 1 */ |
Bloco de código |
---|
select idcampo as chave, descricao as valor from campo where sglentidade = 'FORM' and idnativo = 1 and idcampotipo = (select idcampotipo from campotipo where sglcampotipo = 'PESENT') |
...