Todas as Novidades
Atualizada automaticamente
- Today
-
EasyWorkNet começou a seguir Ajuda com Extends e envio para o banco
- Última semana
-
iosman começou a seguir Fixar div até atingir uma certa altura
-
dlemes começou a seguir PHP+Codeginiter - Orientação para Impressão
- Mais antigo
-
ferrsob começou a seguir Fixar div até atingir uma certa altura
-
pedromdinis começou a seguir Ajuda com Extends e envio para o banco
-
alexmill466 começou a seguir Ajuda com Extends e envio para o banco
-
Dija começou a seguir Ajuda com Extends e envio para o banco
-
dlemes começou a seguir Fixar div até atingir uma certa altura
-
Oxyz começou a seguir Ajuda com Extends e envio para o banco
-
marcos_paulo0o começou a seguir Fixar div até atingir uma certa altura
-
Você pode ajustar o comportamento da div para que ela pare de ser fixa ao se aproximar do rodapé, calculando a distância entre a div e o rodapé durante o scroll. Aqui está uma solução que faz isso: <script> $(function(){ var jElement = $('.fixar_banner'); var footer = $('footer'); // Substitua 'footer' pelo seletor do seu rodapé var offsetTop = jElement.offset().top; var footerOffset = footer.offset().top; var elementHeight = jElement.outerHeight(); $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); var distanceToFooter = footerOffset - (scrollTop + elementHeight + 20); // 20 é um espaçamento extra if (scrollTop > offsetTop && distanceToFooter > 0) { jElement.css({ 'position': 'fixed', 'top': '10px' }); } else if (scrollTop > offsetTop && distanceToFooter <= 0) { jElement.css({ 'position': 'absolute', 'top': footerOffset - elementHeight }); } else { jElement.css({ 'position': 'relative', 'top': 'auto' }); } }); }); </script> Explicação: Cálculo das Posições: - offsetTop: É a distância inicial da div em relação ao topo da página. - footerOffset: É a distância do rodapé em relação ao topo da página. - elementHeight: É a altura da div que você quer fixar. Lógica do Scroll: 1. Quando o scroll é maior que a posição inicial da div (offsetTop) e ainda há espaço antes do rodapé (distanceToFooter > 0): - A div é fixada na posição desejada (por exemplo, top: 10px). 2. Quando a div está próxima do rodapé (distanceToFooter <= 0): - A div é posicionada de forma absoluta, alinhando-se ao topo do rodapé. 3. Caso contrário: - A div retorna à posição relativa original. Ajustes: - Certifique-se de substituir 'footer' pelo seletor correto do seu rodapé. - O valor 20 é um espaçamento extra para evitar que a div encoste no rodapé. Ajuste conforme necessário.
-
Opa. Vaeu, mas não consegui. Consegue me ajudar com o código ou me passar um link de artigo ou vídeo? Abs
-
DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
-
DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
-
DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
-
Caros amigos, saudações. Por favor, me permita tirar uma dúvida com os amigos. Tenho um Formulário onde o Usuário digita todos os Dados necessários. Minha dúvida: --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ? Grato, Cesar
-
Tenho uma abela de usuarios e uma tabela de administradores e clientes. Gostaria de uma ajuda para implementar um cadastro users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc... Queria ajuda para extender de user as classes Admin e Client Olhem como estáAdmin <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User { use HasFactory; protected $fillable = [ 'name', 'email', 'password', 'registration' ]; private string $registration; public function create( string $name, string $email, string $password, string $registration ) { //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]); parent::$name = $name; parent::$email = $email; parent::$password = $password; $this->registration = $registration; } } User <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; static string $name; static string $email; static string $password; /** * The attributes that are mass assignable. * * @var list<string> */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var list<string> */ protected $hidden = [ 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array<string, string> */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } public function roles() : BelongsToMany { return $this->belongsToMany(Role::class); } public function hasHole(Array $roleName): bool { foreach ($this->roles as $role) { if ($role->name === $roleName) { return true; } } return false; } public function hasHoles(Array $rolesName): bool { foreach ($this->roles as $role) { foreach ($rolesName as $rolee) { if ($role->name === $rolee) { return true; } } } return false; } public function hasAbility(string $ability): bool { foreach ($this->roles as $role) { if ($role->abilities->contains('name', $ability)) { return true; } } return false; } } Como gravar um Admin na tabela admins sendo que ele é um User por extensão? Tentei assim mas é claro que está errado... public function store(Request $request, Admin $adminModel) { $dados = $request->validate([ "name" => "required", "email" => "required|email", "password" => "required", "registration" => "required" ]); $dados["password"] = Hash::make($dados["password"]); $admin = Admin::where("registration", $dados["registration"])->first(); if ($admin) return redirect()->route("admin.new") ->withErrors([ 'fail' => 'Administrador já cadastrados<br>, favor verificar!' ]); $newAdmin = $adminModel->create( $dados['name'], $dados['email'], $dados['password'], $dados['registration'] ); dd($newAdmin); $adminModel->save(); //$adminModel::create($admin); return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso'); }
-
Fala pessoal, tudo bem? Eu tenho o seguinte código: <script> $(function(){ var jElement = $('.fixar_banner'); $(window).scroll(function(){ if ( $(this).scrollTop() > 120 ){ jElement.css({ 'position':'fixed', 'top':'10px' }); }else{ jElement.css({ 'position':'relative', 'top':'auto' }); } }); }); </script> Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol. https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm Espero ter sido claro. Obrigado :)
-
Na prática, existem duas abordagens principais, cada uma com seus prós e contras: Baixa após finalização da venda (Recomendado): O estoque só é atualizado quando a venda é efetivamente concluída (pagamento confirmado) Vantagens: Evita inconsistências caso a venda seja cancelada Maior segurança nas operações Histórico mais preciso de transações Desvantagens: Necessidade de verificar disponibilidade real-time durante a venda Baixa durante a inclusão dos itens: O estoque é atualizado conforme os produtos são adicionados ao carrinho Vantagens: Reserva imediata do produto Previne vendas simultâneas do mesmo item Desvantagens: Necessidade de "desfazer" as baixas em caso de cancelamento Maior complexidade no controle de transações Risco de inconsistências em caso de falhas Recomendação: Implementar a baixa após a finalização da venda, mas com um sistema de "reserva temporária" durante o processo de venda. Isso pode ser feito: // No Controller do PDV public function adicionarItem() { // Verifica disponibilidade real-time $disponivel = $this->estoque_model->verificarDisponibilidade($produto_id, $quantidade); if ($disponivel) { // Adiciona à reserva temporária $this->reserva_model->reservarProduto($produto_id, $quantidade, $venda_id); // Adiciona ao carrinho $this->venda_model->adicionarItem($produto_id, $quantidade, $venda_id); } } public function finalizarVenda($venda_id) { // Confirma o pagamento if ($this->pagamento_model->processar($venda_id)) { // Efetua a baixa real no estoque $this->estoque_model->baixarProdutos($venda_id); // Remove as reservas $this->reserva_model->limparReservas($venda_id); return true; } return false; } Esta abordagem oferece: Segurança nas operações Controle preciso do estoque Possibilidade de cancelamento sem inconsistências Prevenção de vendas duplicadas O importante é garantir que o sistema tenha tratamento adequado para: Timeout de reservas não finalizadas Cancelamentos Falhas durante o processo Concorrência de vendas
-
Caros amigos, saudações. Gostaria de tirar uma dúvida com os amigos, referente a PDV. Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto. Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza: a baixa direto dos produtos no estoque ou somente após concretizar a venda o sistema baixa os produtos do estoque ? Grato, Cesar
-
Amigo Williams, saudações. Obrigado por sua dica, fiz desta forma e deu certo. document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key.toLowerCase() !== 'r' ) return; evt.preventDefault(); }); Grato, Cesar
-
PHP+Codeigniter - Dúvida em Relação a Teclas
Williams Duarte respondeu ao tópico de violin101 em PHP
Normalize a tecla para minúscula const key = evt.key.toLowerCase(); -
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
-
Olá, amigo seu erro está na escrita do comando: Maiúsculas no uso de mysqli: A função está escrita como mysqlI_connect e mysqlI_set_charset. O correto é usar todas as letras minúsculas (mysqli_connect, mysqli_set_charset), pois o PHP é sensível a maiúsculas em nomes de funções. Recomendo você a usar o código abaixo: <?php $host = 'servidor_b'; $user = 'user'; $pass = '********'; $db = 'banco'; // Conexão e seleção do banco de dados $conexao = mysqli_connect($host, $user, $pass, $db); // Verifica se a conexão foi bem-sucedida if (!$conexao) { die("Falha na conexão: " . mysqli_connect_error()); } // Configura o charset mysqli_set_charset($conexao, "utf8"); echo "Conexão estabelecida com sucesso!"; // Fecha a conexão (se necessário) // mysqli_close($conexao); ?>
-
Olá! Tente assim: <?php // defina as variáveis de conexão $config = [ 'db_host' => 'your-remote-host', 'db_user' => 'your-db-user', 'db_pass' => 'secret-password', 'db_name' => 'imasters', ]; // tenta estabelecer conexão: try { $sqli = new mysqli($config['db_host'], $config['db_user'], $config['db_pass']); // define o padrão de caracteres $sqli->set_charset('utf8'); // selecionar/abrir o banco de dados para trabalhar $sqli->select_db($config['db_name']); } catch (Exception $e) { // se não conseguir estabelecer conexão, exibe erro exit('<p><b>Falha na conexão</b>: ' . $e->getMessage() . '</p>'); } E veja se aparece algum erro específico.
-
Fala galera, tudo certo? Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro. Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro. Segue código: $host = 'servidor B'; $user = 'user'; $pass = '********'; $db = 'banco'; // conexão e seleção do banco de dados $conexao = mysqlI_connect($host, $user, $pass, $db); mysqlI_set_charset($conexao,"utf8"); //print "Conexão rodando e OK!"; //mysqlI_close($conexao); Alguém pode me ajudar?
-
[Resolvido] JavaScript - Exibir logo dentro da Tabela html
violin101 respondeu ao tópico de violin101 em Javascript
Caro amigo, Williams. Obrigado, tu és 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... -
[Resolvido] JavaScript - Exibir logo dentro da Tabela html
Williams Duarte respondeu ao tópico de violin101 em Javascript
Para exibir um logo quando a tabela estiver vazia, você pode: 1 - Adicionar uma div com o logo abaixo da tabela: <table id="tbventas"> <tbody></tbody> </table> <div id="empty-table-logo" style="text-align:center;"> <img src="caminho/logo.png" alt="Logo empresa"> </div> 2 - Controlar a visibilidade via JavaScript: // Função para verificar se tabela está vazia function checkTableEmpty() { const tbody = document.querySelector("#tbventas tbody"); const logo = document.getElementById("empty-table-logo"); if (tbody.children.length === 0) { logo.style.display = "block"; } else { logo.style.display = "none"; } } // Chamar após remover ou adicionar itens $("#tbventas tbody").append(html); checkTableEmpty(); // Na remoção de item $('.btn-remove-produto').click(function() { $(this).closest('tr').remove(); checkTableEmpty(); }); Chame checkTableEmpty() sempre que manipular a tabela para atualizar a visibilidade do logo. -
Javascript - Calcular Valores Monetário em Tempo Real
violin101 respondeu ao tópico de violin101 em Javascript
Caros amigos, saudações. Depois de revisar e revisar, consegui resolver o problema de Cálculo em Tempo Real. o fonte ficou assim: jQuery('input').on('keyup',function(){ //já está no Formato(0.00) var resto = document.getElementById("pgRest").value; //já está no Formato(0.00) var desct = document.getElementById("pgDsct").value; resto = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); desct = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real com 2 casas decimais jQuery('#pgTroco').val((resto + desct).toFixed(2).replace('.', ',')); }) Grato, Cesar -
Javascript - Calcular Valores Monetário em Tempo Real
violin101 postou um tópico no fórum Javascript
Caros amigos, saudações. Estou com uma dúvida, referente cálculo de valores em tempo real. Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado. Quero mostrar o RESULTADO assim: 0,00 ou 0.00 Abaixo posto o código. jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando }) Grato, Cesar -
[Resolvido] JavaScript - Exibir logo dentro da Tabela html
violin101 postou um tópico no fórum Javascript
Caro amigos, saudações. Tenho uma tabela escrita em JS que funciona corretamente. Minha dúvida: - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ? Abaixo posto o script: document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar Grato, Cesar -
PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto
Williams Duarte respondeu ao tópico de violin101 em PHP
-
PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto
violin101 respondeu ao tópico de violin101 em PHP
amigo Williams, saudações. Deus o abençoa, realmente faltou declarar no início do JS. let timeoutId; // Declaração da variável Fiz a Declaração e funcionou corretamente. Muito Obrigado. Deus o abençoa. Atenciosamente, Cesar -
PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto
Williams Duarte respondeu ao tópico de violin101 em PHP
Primeiro, você não está declarando a variável timeoutId <script type="text/javascript"> $(document).ready(function(){ let timeoutId; // Declaração da variável $('#idProdutos').on('input', function() { clearTimeout(timeoutId); const idprd = $(this).val(); timeoutId = setTimeout(function() { if (idprd) { $.ajax({ url: "<?php echo base_url(); ?>vendas/pdvcaixa/buscarID", type: "POST", data: { idProdutos: idprd }, // Corrigido nome do parâmetro dataType: 'json', // Importante adicionar success: function(response) { if (response.success) { // Como o resultado é um array, pegamos o primeiro item if (response.produto.length > 0) { $("#descricao").val(response.produto[0].descricao); } } }, error: function(xhr, status, error) { console.log('Erro:', error); } }); } }, 1500); }); }); </script> No Controller, ajuste para: public function buscarID() { $idprd = $this->input->post('idProdutos'); $produto = $this->pdvcaixa_model->buscarCodigo($idprd); if ($produto) { echo json_encode([ 'success' => true, 'produto' => $produto ]); } else { echo json_encode([ 'success' => false, 'message' => 'Produto não encontrado' ]); } } Se ainda assim não funcionar, você pode adicionar alguns console.log para debug: $('#idProdutos').on('input', function() { console.log('Input detectado'); clearTimeout(timeoutId); const idprd = $(this).val(); console.log('Valor digitado:', idprd); timeoutId = setTimeout(function() { console.log('Timeout executado'); if (idprd) { // ... resto do código -
PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. Conforme sua orientação acima, fiz a adequação no meu sistema, mas infelizmente não tive sucesso. Após digitar o Código no INPUT não fez a contagem de tempo e não mostrou a descrição. O meu INPUT está assim: <form action="<?php echo current_url(); ?>" id="frmPdv" method="post"> <div class="row"> <div class="col-md-3"> <label for="idProdutos">Código:</label> <input type="text" class="form-control" id="idProdutos" name="idProdutos" style="margin-top:-7px; font-size:15px; width:100%; font-weight:normal; background:#FFFFFF;" placeholder="Apenas Número"> </div> <div class="col-md-9"> <label for="descricao">Produto:</label> <input type="text" class="form-control" id="descricao" name="descricao" style="margin-top:-7px; font-size:15px; width:100%; font-weight:normal; background:#FFFFFF;" placeholder="Pesquisar por descrição do produto" > </div> </div> </form> O meu JS está assim: <script type="text/javascript"> $(document).ready(function(){ $('#idProdutos').on('input', function() { clearTimeout(timeoutId); const idprd = $(this).val(); timeoutId = setTimeout(function() { if (idprd ) { $.ajax({ url: "<?php echo base_url(); ?>vendas/pdvcaixa/buscarID/", type: "POST", data: { idprd : idprd }, success: function(response) { // Exibe o resultado if (response.success) { //Exibe no INPUT da Descrição $("#descricao").val(response.produto.descricao); } } }); } }, 1500); // 1.5 segundos de delay }); }); </script> O meu Controller está assim: public function buscarID() { $idprd = $this->input->post('idProdutos'); $produto = $this->pdvcaixa_model->buscarCodigo($idprd); echo json_encode([ 'success' => true, 'produto' => $produto ]); } O meu MODEL está assim: public function buscarCodigo($idprd) { $this->db->select('*'); $this->db->from('produtos'); $this->db->where('produtos.idProdutos', $idprd); $this->db->where('produtos.statusProd', 1); $this->db->order_by('produtos.descricao', 'ASC'); return $this->db->get()->result(); } Grato Cesar