Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
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">  GERENCIAMENTO DE ACESSO A DISPOSITIVOS </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 */
        }

 /* Estilo Lista*/
        ul.custom-list li {
  list-style-type: disc; /* Define o tipo de marcador como disco (bolinha) */
  list-style-position: inside; /* Coloca o marcador dentro da área de layout do item da lista */
 padding-left: 1px !important;

}
 

  </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>Vendas - Itens
            </td>
          </tr>
          <tr>
              <td><i class="fas fa-globe"></i> Aplicação:</td>
              <td>App móvel</td>
          </tr>
          <tr>
              <td><i class="fas fa-hashtag"></i> Identificador:</td>
              <td> DTSFAPD-1936</td>
          </tr>
      </table>
      </span>
    </div>
    </div>
 

      <br>

       <!-- Segundo Card -->

       <h2 class="custom-heading">
        <i class="fa-solid fa-eye"></i>&nbsp &nbsp VISÃO GERAL
      </h2>
      <p class="justificado">
        A atualização introduz a capacidade de aplicar diferentes tabelas de preços para itens individuais em um único pedido. Essa funcionalidade oferece maior flexibilidade e precisão na gestão de preços e descontos, facilitando a adaptação a diferentes cenários de vendas e necessidades dos clientes.
        
      </p>
<br>

    <h2 class="custom-heading">
      <i class="fa-solid fa-rocket"></i>&nbsp &nbsp OBJETIVO
    </h2>
    <p class="justificado">
      Proporcionar aos usuários do CRM a possibilidade de aplicar diferentes tabelas de preços para cada item do pedido, oferecendo maior controle sobre a precificação e permitindo estratégias de vendas mais dinâmicas e personalizadas.
    </p> <br>



    <!-- ... (seu conteúdo existente) ... -->

                          
          </section>

          <section id="section2" style="margin-top: 40px;">
            <h2 class="custom-heading"><i class="fa-solid fa-star"></i>&nbsp DETALHES FUNCIONAIS</h2>
            <h3>Funções </h3>
        
            <ul><li>Função: Tabela de Preço Individual por Item no Pedido</li><li>Configuração Inicial:<ul><li>Acesse Configuração > Configuração Pedido > Busca Produto.</li><li>Ative o novo filtro 'PEDIDOPRODUTO_TABELAPRECO'.</li><li>Isso permite que a busca de preços considere as tabelas especificadas nos itens do carrinho.</li></ul></li><li>Implementação:<ul><li>Ative campos relevantes em Configuração > Configuração Pedido > Produto.</li><li>Esses campos permitem a alteração da tabela de preços diretamente na grid do pedido na Web ou no carrinho no Android.</li></ul></li></ul>
                          
          </section>
         
      
          <section id="section3" style="margin-top: 40px;">
            <h2 class="custom-heading"><i class="fa-solid fa-shoe-prints"></i>&nbsp COMO USAR?</h2>
            <h3> Passo a Passo</h3>

            <ol><li>Ao criar um novo pedido, selecione a tabela de preços no cabeçalho.</li><li>Adicione itens ao pedido, que inicialmente seguirão a tabela de preços do cabeçalho.</li><li>Altere a tabela de preços por item no carrinho, se necessário. O preço será ajustado conforme a tabela selecionada para cada item.</li><li>Produtos sem preço definido na tabela selecionada receberão uma marcação de inconsistência para correção.</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/tdnPIX2S.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> &nbspEXEMPLO PRÁTICO</h2>
                       

             
              <b>Desafio Antigo:</b>
              <p>Limitação ao aplicar uma única tabela de preços do cabeçalho para todos os itens de um pedido, restringindo a flexibilidade de preços e descontos.
                
                </p>
              
              <br>
              
              <b>Solução Atualizada:</b>
              <p>Com a nova funcionalidade, é possível selecionar tabelas de preços distintas para cada item do pedido. Por exemplo, um produto que custa R$ 190 na tabela "95" pode ter o preço alterado para R$ 200 ao mudar para a tabela "São Paulo". Isso oferece maior controle e personalização na gestão de preços, adaptando-se melhor às necessidades dos clientes e estratégias de vendas.

                </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>&nbsp DETALHES TÉCNICOS</h2>

            <ol>
              <li><b>Configuração</b>
                  <ul class="custom-list">
                      <li>Realizar a criação de registros na tela Configuração > Configuração Pedido > Produto, para os contextos:
                          <ul class="custom-list">
                              <li>ANDROID_CARD_TABELAPRECO</li>
                              <li>ANDROID_NEGOCIACAO_TABELAPRECO</li>
                              <li>ANDROID_CARRINHO_TABELAPRECO</li>
                              <li>WEB_GRID_TABELAPRECO</li>
                              <li>WEB_PESQUISA_TABELAPRECO</li>
                          </ul>
                      </li>
                      <li>Os campos devem ser inseridos com idnpermitevisualizar = 0.</li>
                      <li>Implementar a busca de tabela de preço na tela Configuração > Configuração Pedido > Busca Produto, com código PEDIDOPRODUTO_TABELAPRECO, aproveitando os mesmos filtros da busca de tabela de preço do cabeçalho.</li>
                      <li>Pelo tools, opção 18, criar o seguinte registro na tabela wsconfigpedidogeral (detalhes do registro a ser criado não foram fornecidos).</li>
                  </ul>
              </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;">
              &lt;changeSet author="systemScript" failOnError="false" id="7:53d7765c88ed88ae458950ac1d10a57f" runOnChange="true"&gt;
    &lt;preConditions onError="HALT" onFail="MARK_RAN" onSqlOutput="IGNORE"&gt;
        &lt;customPrecondition className="com.wealthsystems.sim3g.dao.hibernate.api.liquibase.custom.precondition.RegisterExistsPrecondition"&gt;
            &lt;param name="table" value="WsConfigPedidoGeral"/&gt;
            &lt;param name="column" value="chave"/&gt;
            &lt;param name="value" value="'EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS'"/&gt;
        &lt;/customPrecondition&gt;
    &lt;/preConditions&gt;
    &lt;insert tableName="WsConfigPedidoGeral"&gt;
        &lt;column name="idWsConfigPedidoGeral" valueSequenceNext="SEQPKWSCONFIGPEDIDOGERAL"/&gt;
        &lt;column name="chave" valueComputed="'EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS'"/&gt;
        &lt;column name="idnAtivo" valueComputed="0"/&gt;
        &lt;column name="label" valueComputed="''"/&gt;
    &lt;/insert&gt;
&lt;/changeSet&gt;</pre></code> </div>


<br>
  <li><b>Implementação do novo campo no pedido</b>
      <ul class="custom-list">
          <li>Implementar o campo "Tabela preço" no pedido de venda, no contexto de itens do pedido, com o comportamento definido pelas configurações dos registros da tabela Configuração > Configuração Pedido > Produto, criados anteriormente.</li>
          <li>As opções do campo serão definidas pelo filtro configurado pela tela Configuração > Configuração Pedido > Busca Produto, com registro de código PEDIDOPRODUTO_TABELAPRECO.</li>
          <li>Além dos filtros da busca do cabeçalho, considerar novos campos de filtro:
              <ul class="custom-list">
                  <li>Tabela localtabelapreco</li>
                  <li>PEDIDOPRODUTO_CULTURA_IDCULTURA (https://jiraproducao.totvs.com.br/browse/DTSFAPD-1934)</li>
                  <li>PEDIDOPRODUTO_SAFRA_IDSAFRA (https://jiraproducao.totvs.com.br/browse/DTSFAPD-1935)</li>
                  <li>Tabela tabelaprecoproduto</li>
                  <li>PEDIDOPRODUTO_PRODUTO_IDPRODUTO: Filtrar somente tabelas de preço que contenham preços para o produto em questão.</li>
              </ul>
          </li>
          <li>Na tela Configuração > Configuração Pedido > Busca Produto, para o registro TABELAPRECOPRODUTO, adicionar uma nova opção de código PEDIDOPRODUTO_TABELAPRECO_IDTABELAPRECO.</li>
          <li>Esta opção fará o apontamento do critério where para o campo "Tabela preço" selecionado no contexto de itens.</li>
          <li>Ao trocar o valor da tabela de preço do item, considerar essa tabela para a busca de cache de preços para o item, priorizando a tabela selecionada no item acima da selecionada no cabeçalho.</li>
          <li>Ao trocar a tabela de preço dos itens do pedido, o sistema tentará preservar o % desconto, marcando o registro como inconforme em caso de inconformidades com validações.</li>
          <li>O valor padrão do campo "Tabela preço" do item será o valor do campo selecionado no cabeçalho.</li>
          <li>A persistência do campo será feita no campo pedidoproduto.idtabelapreco.</li>
      </ul>
  </li>

  <br>

  <ol>
    <li><b>Busca de produtos considerando preços de outras tabelas de preço</b>
        <ul class="custom-list">
            <li>No pedido, na construção do cache de produtos selecionáveis para a venda:
                <ul class="custom-list">
                    <li>Se o parâmetro EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS estiver ativo, o sistema deverá exibir produtos segundo o filtro: <code>select distinct idproduto from tabelaprecoproduto where idtabelapreco in (:CONSULTA PEDIDOPRODUTO_TABELAPRECO PARA O CONTEXTO DO ITEM EM QUESTÃO) and idtabelapreco <> :idtabelapreco_cabecalho</code></li>
                </ul>
            </li>
            <li>Para os itens que respeitam a consulta acima, o sistema deverá exibir um ícone fixo que, quando clicado, exibirá a mensagem "O produto possui preço em outras tabelas de preço".</li>
            <li>O ícone SVG pode ser baixado pelo link fornecido: <a href="https://tdn.totvs.com/download/attachments/783577764/table_view_FILL0_wght700_GRAD0_opsz48.svg?version=1&modificationDate=1692105275690&api=v2">Ícone SVG</a></li>
        </ul>
    </li>
</ol>

</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 acontece se um produto não tiver preço definido na tabela selecionada?</div>
                    <div class="collapsible-body"><span>O produto receberá uma marcação de inconsistência, indicando a necessidade de ajuste ou seleção de uma tabela de preços apropriada.
                      </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>


  



01. DADOS GERAIS

...

TOTVS CRM Automação da Força de Vendas

...

Linha TOTVS CRM SFA

...

Jira
serverJIRA
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyDTSFAPD-1936

02. ESCOPO FUNCIONAL/TÉCNICO

1. Configuração

  • Realizar a criação de registros na tela Configuração > Configuração Pedido > Produto, para os contextos:
      • ANDROID_CARD_TABELAPRECO
      • ANDROID_NEGOCIACAO_TABELAPRECO
      • ANDROID_CARRINHO_TABELAPRECO
      • WEB_GRID_TABELAPRECO
      • WEB_PESQUISA_TABELAPRECO
    • Os campos devem ser inseridos com idnpermitevisualizar = 0
  • Implementar a busca de tabela de preço na tela Configuração > Configuração Pedido > Busca Produto, com código PEDIDOPRODUTO_TABELAPRECO, aproveitando os mesmos filtros da busca de tabela de preço do cabeçalho.
  • Pelo tools, opção 18, o sistema deverá criar o seguinte registro na tabela wsconfigpedidogeral:
    • Bloco de código
          <changeSet author="systemScript" failOnError="false" id="7:53d7765c88ed88ae458950ac1d10a57f" 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="WsConfigPedidoGeral"/>
                      <param name="column" value="chave"/>
                      <param name="value" value="'EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS'"/>
                  </customPrecondition>
              </preConditions>
              <insert tableName="WsConfigPedidoGeral">
                  <column name="idWsConfigPedidoGeral" valueSequenceNext="SEQPKWSCONFIGPEDIDOGERAL"/>
                  <column name="chave" valueComputed="'EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS'"/>
                  <column name="idnAtivo" valueComputed="0"/>
                  <column name="label" valueComputed="''"/>
              </insert>
          </changeSet>

2. Implementação do novo campo no pedido

  • Implementar o campo "Tabela preço" no pedido de venda, no contexto de itens do pedido, cujo comportamento do campo será definido pelas configurações dos registros da tabela Configuração > Configuração Pedido > Produto, criados acima.
    • As opções do campo serão definidas pelo filtro configurado pela tela Configuração > Configuração Pedido > Busca Produto, com registro de código PEDIDOPRODUTO_TABELAPRECO
    • Na tela Configuração > Configuração Pedido > Busca Produto, para o registro TABELAPRECOPRODUTO, a busca de níveis deverá receber uma nova opção de código PEDIDOPRODUTO_TABELAPRECO_IDTABELAPRECO
      • Essa opção fará o apontamento do critério where para o campo "Tabela preço" selecionado no contexto de itens.
    • Ao trocar o valor do campo da tabela de preço do item, essa deve ser considerada para refazer a busca de cache de preços para esse item, respeitando prioritariamente a tabela selecionada no item acima da selecionada no cabeçalho.
      • Ao trocar a tabela de preço dos itens do pedido, o sistema tentará preservar o % desconto, marcando o registro como inconforme, caso o novo preço calculado estiver de alguma forma infringindo alguma validação.
    • O valor padrão do campo "Tabela preço" do item será o valor do campo selecionado no cabeçalho.
    • A persistência do campo será feita no campo pedidoproduto.idtabelapreco

3. Busca de produtos considerando preços de outras tabelas de preço

...

Bloco de código
select distinct idproduto from tabelaprecoproduto where idtabelapreco in (:CONSULTA PEDIDOPRODUTO_TABELAPRECO PARA O CONTEXTO DO ITEM EM QUESTÃO)
and idtabelapreco <> :idtabelapreco_cabecalho

...