

violin101
Members-
Content count
295 -
Joined
-
Last visited
Everything posted by violin101
-
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
-
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
-
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
-
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
-
[Resolvido] JavaScript - Exibir logo dentro da Tabela html
violin101 replied to violin101's topic in Javascript
Caro amigo, Williams. Obrigado, tu és 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... -
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
-
Javascript - Calcular Valores Monetário em Tempo Real
violin101 replied to violin101's topic in 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 -
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
-
PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto
violin101 replied to violin101's topic in 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
violin101 replied to violin101's topic in 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 -
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
-
Caro amigo Williams saudações. Deus o abençoa, deu certo, obrigado, Atenciosamente, Cesar
-
Caro amigo, Williams saudações. Deu certo, gravou com as Hierarquias corretamente. Amigo Williams esta linha mostra o tamanho do campo do mysql: ->where('LENGTH(pl_idconta) <=', 4) // Limita a 2 níveis (1 ou 1.01) Alterei para esta e trouxe os níveis: ->where('CHAR_LENGTH(pl_idconta) <=', 4) // Limita a 2 níveis (1 ou 1.01) Observação: apenas curiosidade. se precisar criar mais um nível, como devo fazer, por exemplo: 1 - principal 1.01 - nível_1 1.01.001 - nível_2 1.01.001.0001 - conta_1
-
Amigo Williams, saudações. POR FAVOR, me PERDOA em recorrer a ajuda do amigo novamente, testando o código que o amigo enviou, continua dando erro de DUPLICIDADE, agora está assim. 1 - TESTE A 1.01 - GRAVA NORMAL 1.01.0001 - GRAVA NORMAL 1.01.0002 ========> AQUI JÁ DÁ ERRO, O SISTEMA NÃO GRAVA .0002 ---- DUPLICA o .0001 novamente 2 - TESTE B 2.01 - GRAVA NORMAL 2.01.0001 - GRAVA NORMAL 2.01.0002 ========> AQUI JÁ DÁ ERRO, O SISTEMA NÃO GRAVA .0002 ---- DUPLICA o .0001 novamente
-
Caro amigo Williams. Consegui fazer o INSERT. Agora estou com o seguinte problema. Quando salvo os Registro não faz a soma, ou seja, duplica o 1, para todos. Salva assim: 1 - teste 1.01 testeA 1.01.01 testeB 1.01.01.0 testeC Segui todas as suas orientações conforme a MODEL, só não entendo porque não está fazendo o ++. O meu controller ficou assim: function adicionar() { if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'aContas')) { $this->session->set_flashdata('error', 'Você não tem permissão para adicionar plano de contas.'); redirect(base_url()); } $this->load->library('form_validation'); $this->data['custom_error'] = ''; if ($this->form_validation->run('planocontas') == false) { $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false); } else { $data = [ 'parent_code' => $this->input->post('parent_code'), 'pl_descricao' => $this->input->post('pl_descricao'), 'pl_titulo' => 1, 'pl_status' => 1 ]; /* echo '<pre>'; var_dump($data); echo '</pre>'; exit(); */ $result = $this->planocontas_model->insert($data); if ($result) { $this->session->set_flashdata('success', 'Conta adicionada com sucesso!'); redirect(base_url() . 'faturamento/planocontas/adicionar/'); } else { $this->data['custom_error'] = '<div class="form_error"><p>Ocorreu um erro.</p></div>'; } } $this->novo(); $this->load->view('estilo/header', $this->data); $this->load->view('faturamento/planocontas/adicionarConta'); } public function novo() { // Carrega todos os códigos possíveis de serem pai $this->load->model('planocontas_model'); $data['plcta'] = $this->db ->select('*') ->from('planocontas') ->where('pl_status', 1) ->order_by('pl_idconta') ->get() ->result(); $this->load->view('estilo/header', $this->data); $this->load->view('faturamento/planocontas/adicionarConta', $data); } A MODEL, ficou assim: <?php class Planocontas_model extends CI_Model { function __construct() { parent::__construct(); $this->load->database(); } function get($table, $fields, $where = '', $perpage = 0, $start = 0, $one = false, $array = 'array') { $this->db->select($fields); $this->db->from($table); $this->db->order_by('pl_idconta', 'ASC'); $this->db->limit($perpage, $start); if ($where) { $this->db->where($where); } $query = $this->db->get(); $result = !$one ? $query->result() : $query->row(); return $result; } function getById($id) { $this->db->where('idPlanocontas', $id); $this->db->limit(1); return $this->db->get('planocontas')->row(); } function edit($table, $data, $fieldID, $ID) { $this->db->where($fieldID, $ID); $this->db->update($table, $data); if ($this->db->affected_rows() >= 0) { return true; } return false; } function delete($table, $fieldID, $ID) { $this->db->where($fieldID, $ID); $this->db->delete($table); if ($this->db->affected_rows() == '1') { return true; } return false; } function count($table) { return $this->db->count_all($table); } public function getNextCode($parent_code = null) { if (!$parent_code) { // Busca próximo código raiz (1, 2, 3...) $query = $this->db->select('MAX(SUBSTRING_INDEX(pl_idconta, ".", 1)) as max_code') ->from('planocontas') ->where('LENGTH(pl_idconta) = 1') ->get(); $result = $query->row(); return ($result->max_code ?? 0) + 1; } else { // Busca próximo subcódigo $like_pattern = $parent_code . '.%'; $length = strlen($parent_code) + 3; $query = $this->db->select('MAX(SUBSTRING_INDEX(pl_idconta, ".", -1)) as max_code') ->from('planocontas') ->like('pl_idconta', $like_pattern, 'after') ->where('LENGTH(pl_idconta) =', $length) ->get(); $result = $query->row(); $next_number = str_pad(($result->max_code ?? 0) + 1, 2, '0', STR_PAD_LEFT); return $parent_code . '.' . $next_number; } } public function insert($data) { if (empty($data['parent_code'])) { $data['pl_idconta'] = $this->getNextCode(); } else { $data['pl_idconta'] = $this->getNextCode($data['parent_code']); } return $this->db->insert('planocontas', [ 'pl_idconta' => $data['pl_idconta'], 'pl_descricao' => $data['pl_descricao'], 'pl_titulo' => $data['pl_titulo'], 'pl_status' => $data['pl_status'] ]); } } A VIEW está assim: <?php defined('BASEPATH') OR exit('No direct script access allowed'); $this->load->view('faturamento/tema/topo'); ?> <!-- Content Wrapper. Contains page content --> <div class="content-wrapper"> <!-- Content Header (Page header) --> <section class="content-header"> <div class="container-fluid"> <div class="row mb-2"> <div class="col-sm-6"> <h1>Condição de Pagamento</h1> </div> <div class="col-sm-6"> <ol class="breadcrumb float-sm-right"> <li class="breadcrumb-item"><a href="<?php echo base_url()?>faturamento/controle">Home</a></li> <li class="breadcrumb-item active">Condição de Pagamento</li> </ol> </div> </div> </div><!-- /.container-fluid --> </section> <section class="content"> <div class="container-fluid"> <!-- Mensagem de Sucesso / Erro --> <?php $this->load->view('estilo/acao'); ?> <div class="row"> <!-- left column --> <div class="col-md-12"> <div class="card card-success"> <div class="card-header"> <h3 class="card-title">Adicionar</h3> </div> <!-- /.card-header --> <!-- form start --> <form action="<?php echo current_url(); ?>" id="frmPlanoconta" method="post" > <div class="card-body"> <div class="form-group"> <label for="parent_code" class="control-label">Conta<span class="required">*</span></label> <select name="parent_code" id="parent_code" style="width:230px" class="form-control"> <option value="">Selecione uma Conta</option> <?php foreach ($plcta as $ct) { echo '<option value="'.$ct->pl_idconta.'">'.$ct->pl_idconta. '-'.$ct->pl_descricao.'</option>'; } ?> </select> </div> <div class="form-group"> <label for="pl_descricao">Descrição<span class="required">*</span></label> <input id="pl_descricao" type="text" name="pl_descricao" style="width:100%" class="form-control" value="<?php echo set_value('pl_descricao'); ?>" /> </div> <div class="card-footer" style="text-align:center;"> <a href="<?php echo base_url() ?>faturamento/planocontas" id="" class="btn btn-danger"><i class="fa fa-undo"></i> Voltar</a> <button type="submit" class="btn btn-primary">Adicionar</button> </div> </div> </form> </div> </div> </div> </section> </div> <?php $this->load->view('estilo/footer'); ?> Grato, Cesar
-
Amigo Williams, saudações. Desculpa minha dúvida. Qual campo no Formulário POST seria essa linha: $parent_code = null Seguindo sua orientação acima, o sistema salva os campos: Código e Descrição somente com 1. Grato, Cesar
-
Caros amigos, saudações. Estou com uma pequena dúvida se é possível ser realizado. Preciso passar 2 IDs para o Sistema executar a função, estou utilizando desta forma e gostaria de saber como faço via JS para passar os parâmetro que preciso. Observação: Dentro da TABELA utilizei 2 Forms, para passar os IDS que preciso, funcionou conforme código abaixo. <div class="card-body"> <table id="tab_clie" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center; width:10%;">Pedido Nº</th> <th style="text-align:center; width:10%;">Data Pedido</th> <th style="text-align:center; width:32%;">Fornecedor</th> <th style="text-align:center; width:10%;">Status</th> <th style="text-align:center; width:5%;">Ação</th> </tr> </thead> <tbody> <?php foreach ($results as $r) { $dta_ped = date(('d/m/Y'), strtotime($r->dataPedido)); switch ($r->pd_status) { case '1': $status = ' Aberto '; $txt = '#FFFFFF'; //Cor: Branco $cor = '#000000'; //Cor: Preta break; case '2': $status = 'Atendido Total'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#086108'; //Cor: Verde break; case '3': $status = 'Atendido Parcial'; $txt = '#000000'; //Cor: Branco $cor = '#FEA118'; //Cor: Amarelo break; default: $status = 'Cancelado'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#D20101'; //Cor: Vermelho break; } echo '<tr>'; echo '<td width="10%" height="10" style="text-align:center;">'.$r->pd_numero.'</td>'; echo '<td width="10%" height="10" style="text-align:center;">'.$dta_ped.'</td>'; echo '<td width="32%" height="10" style="text-align:left;">'.$r->nome.'</td>'; echo '<td width="10%" height="10" style="text-align:left;"><span class="badge" style="color:'.$txt.'; background-color:'.$cor.'; border-color:'.$cor.'">'.$status.'</span></td>'; echo '<td width="5%" style="text-align:center;">'; ?> <div class="row"> <?php if($this->permission->checkPermission($this->session->userdata('permissao'), 'vPedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/visualizar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-warning" title="Visualizar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-search icon-white"></i></button> </form> <?php } if($this->permission->checkPermission($this->session->userdata('permissao'), 'ePedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/editar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-primary" title="Editar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-edit icon-white"></i></button> </form> <?php } ?> </div> <?php echo '</td>'; echo '</tr>'; } ?> </tbody> </table> </div> Grato, Cesar.
-
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
-
Caros amigos, saudações. Consegui solucionar a minha SQL desta forma. <?php public function faturaPrazo($diasvcto = null, $ordenar = null){ if ($ordenar != null) { $this->db->order_by($ordenar); } $query = "SELECT faturamento.*, fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.dataVencimento <= DATE_ADD(NOW(), INTERVAL $diasvcto DAY) AND faturamento.statusFatur = 1 ORDER BY faturamento.dataVencimento $ordenar "; return $this->db->query($query)->result(); } ?> Observação: - não sei se existe outra rotina parecida ou mais eficiente que a que escrevi. - caso tenha e os amigos puder compartilhar, fico inteiramente grato. Grato, Cesar
-
Caros amigos, saudações. Após pesquisa e conversa com amigos, consegui resolver o meu problema da seguinte forma. Escrevi este código direto no FOREACH da Tabela e resolveu. <?php //Recebe a DataVencimento - MySql $data_inicio = new DateTime($dataVencimento); //Pega a Data Atual $data_atual = new DateTime('now'); //Calcula a Diferença entre a Data Vencimento com data Atual $dateInterval = $data_inicio->diff($data_atual)->days; if($dateInterval <= 20){ $cor = '#FDFEBA'; //Cor: Amarelo } else { $cor = ''; //Cor: Neutro } ?> Grato, Cesar
-
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
-
Caro amigo, Felipe. Saudações. Quando salvo a Data de Vencimento no MySql, salvo neste formato = 2024-11-01 ou seja ANO-MÊS-DIA. Após testar o seu código deu erro de Boolean, nesta linha. // Inverter a data para o formato AAAAMMDD e remover as barras $dataInvertida = DateTime::createFromFormat('d/m/Y', $data)->format('Ymd'); Como corrijo esta linha Grato, Cesar
-
Caros amigos, saudações. Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso. Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa. Minha dúvida, que preciso muito entender: - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo. tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação. Preciso de ajuda. Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ? tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias. Alguns do amigo tem algum vídeo, leitura explicando essa parte ? Grato, Cesar.
-
Amigo Williams, saudações. Eu já fiz, refiz, voltei a fazer a instalação da NFePHP usando o Composer. Não entendo, não entendo,... acho que eu sou burro. Após fazer a Instalação e Configuração da NFePHP no Codeignter, e seguir sua orientação acima, continua aparecendo esse erro. An uncaught Exception was encountered Type: Error Message: Class 'NFePHP\NFe\Make' not found Filename: C:\xampp\htdocs\ziscom\application\libraries\NfeService.php Line Number: 51 Backtrace: File: C:\xampp\htdocs\ziscom\application\controllers\Estoque\nfe.php Line: 48 Function: emitirNFe File: C:\xampp\htdocs\ziscom\index.php Line: 315 Function: require_once Já fiz isso: Para adicionar as bibliotecas ao seu projeto: composer require nfephp-org/sped-nfe composer require nfephp-org/sped-da Configurar o autoload do Composer no CodeIgniter //$config['composer_autoload'] = true; Linha IGNORADA //$config['composer_autoload'] = FCPATH . 'vendor/autoload.php'; Linha IGNORADA $config['composer_autoload'] = './vendor/autoload.php'; Já fiz assim e continua o erro: $nfe = new \NFePHP\NFe\Make(); O meu INDEX.PHP está assim: define('ENVIRONMENT', 'development'); O Composer.json está assim: { "description": "The CodeIgniter framework", "name": "codeigniter/framework", "type": "project", "homepage": "https://codeigniter.com", "license": "MIT", "support": { "forum": "http://forum.codeigniter.com/", "wiki": "https://github.com/bcit-ci/CodeIgniter/wiki", "irc": "irc://irc.freenode.net/codeigniter", "source": "https://github.com/bcit-ci/CodeIgniter" }, "require": { "php": ">=5.3.7", "mpdf/mpdf": "^7.1", "nfephp-org/sped-nfe": "^5.0", "nfephp-org/sped-da": "^1.0" }, "suggest": { "paragonie/random_compat": "Provides better randomness in PHP 5.x" }, "autoload": { "psr-4": { "Libraries\\": "application/libraries" } } } Caro amigo, não entendo, não entendo. Grato, Cesar