Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

Ajuda com lógica - Tabela de comparativos entre planos

Recommended Posts

Fala galera,


Tenho a seguinte tabela no meu site, e hoje, ela é estática (não atualizável por CMSs). Ela tem mais linhas do que essa imagem, mas peguei só um pedaço para ilustrar.

 

5a9eca3206a4a_CapturadeTela2018-03-06as14_04_09.thumb.png.d14e9b17543d25cd678b0b82f54105e1.png

 

Hoje, no meu banco de dados, eu tenho esses 3 planos (ACO, ACO FIT e ACO Modular) cadastrados em uma tabela chamada "sistema_planos". Cada plano tem UM produto cadastrado em "sistema_produto" e interligados por uma tabela chamada "sistema_plano_produto". Dentro de cada produto, existem os módulos que, na imagem acima, são ilustrados alinhados na coluna da esquerda. Esses módulos estão cadastrados em uma tabela chamada "sistema_modulo" e interligados no produto através de uma tabela chamada "sistema_produto_modulo".

 

Preciso montar essa tabela da imagem consultando as informações no banco. Consegui, mas devido a alta quantidade de consultas no banco, em 80% das vezes dá TIMEOUT.

Então, acho que há algo errado na lógica que construí. Gostaria de dicas de como proceder!

 

$divTabela = "";
$listaHead01 = "";
$listaHead02 = "";
$listaModulo = "";
$listaFoot = "";

/ * Traz os planos pra montar a tabela
$objPlano = new Plano();
$objPlano->plaAtivo = "S";
$objPlano->plaExcluido = "N";
$resultadoPlano = $objPlano->load(false, "plaValor DESC");

if(!empty($resultadoPlano)){

    // * Inicia os objetos
    $objPlanoProduto = new PlanoProduto();
    $objProdutoModulo = new ProdutoModulo();
    
    $objModulo = new Modulo();
    $objModulo->modAtivo = "S";
    $objModulo->modExcluido = "N";

    $arrayProdutoId = array();

    // * Loop de planos
    foreach($resultadoPlano as $plano){

        $valorPlano = (!empty($plano['plaValor'])) ? "A partir de<br><span>R$".number_format($plano['plaValor'],2,",",".")."</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small>" : "Consulte";

        // * Headings
        $listaHead01 .= "<th width=\"20%\">".$plano['plaTitulo']."</th>";
        $listaHead02 .= "<th>".$valorPlano."</th>";

        // * Footers
        $listaFoot .= "<td><a class=\"btn-arq\" href=\"/produto/".$plano['plaAlias']."\">Mais detalhes</a></td>";

        // * Precisamos saber agora qual ícone irá em cada TD
        // * Para isso, traremos primeiro o produto do plano $i
        // * Com o produto definido, podemos saber quais módulos cada produto tem disponível
        $objPlanoProduto->plaId = $plano['plaId'];
        $resultadoPlanoProduto = $objPlanoProduto->load();

        if(!empty($resultadoPlanoProduto)){
            $arrayProdutoId[] = $resultadoPlanoProduto[0]['proId'];
        }

    }

    // * Traz a lista de módulos
    $resultadoModulo = $objModulo->load();

    if(!empty($resultadoModulo)){

        foreach($resultadoModulo as $modulo){

            // * Inicia as variáveis
            $tdPlano = "";

            // * Tbody
            // * Pra cada plano, cria uma TD
            for($i = 0; $i < count($resultadoPlano); $i++){

                $iconeCheck = "";

                // * Agora, trazemos os módulos do produto
                $objProdutoModulo->proId = $arrayProdutoId[$i];
                $objProdutoModulo->modId = $modulo['modId'];
                $resultadoProdutoModulo = $objProdutoModulo->load(true);

                if(!empty($resultadoProdutoModulo)){

                    // * Verifica se o produto é modular
                    if($resultadoPlano[$i]['plaValor'] > 0){
                        $iconeCheck = "<i class=\"fa fa-check\"></i>";
                    }
                    else{
                        $iconeCheck = "<i data-toggle=\"tooltip\" title=\"Item opcional. Consulte adição.\" class=\"fa fa-question\"></i>";
                    }
                }

                // * Monta no template
                $tdPlano .= "<td>".$iconeCheck."</td>";

            }

            $listaModulo .= "
            <tr>
                <td>".$modulo['modTitulo']."</td>
                ".$tdPlano."
            </tr>";
        }

    }

    $divTabela = "
    <table class=\"tabelaPreco table table-bordered table-striped\">
        <thead>
            <tr>
                <th width=\"20%\" style=\"background:#f3f3f3\"></th>
                ".$listaHead01."
            </tr>
            <tr>
                <th style=\"background:#f3f3f3\"></th>
                ".$listaHead02."
            </tr>
        </thead>
        <tbody>
            ".$listaModulo."
        </tbody>
        <tfoot>
            <tr>
                <td></td>
                ".$listaFoot."
            </tr>
        </tfoot>
    </table>";
}

 

Resultado esperado:

<table class="tabelaPreco table table-bordered table-striped">
  <thead>
    <tr>
      <th width="25%" style="background:#f3f3f3"></th>
      <th width="25%">A.C.O</th>
      <th width="25%">A.C.O Fit</th>
      <th width="25%">A.C.O Modular</th>
    </tr>
    <tr>
      <th style="background:#f3f3f3"></th>
      <th>A partir de<br><span>R$299</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
      <th>A partir de<br><span>R$149</span> mensais<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
      <th>Consulte<br><small>+ Taxa de ativação da licença e tempo mínimo de contrato: 12 meses</small></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Base de bancos</td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
    </tr>
    <tr>
      <td>Base CEP integrada</td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
    </tr>
    <tr>
      <td>Relatórios personalizáveis</td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
      <td><i class="fa fa-check"></i></td>
    </tr>
  </tbody>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.