

violin101
Members-
Total de itens
303 -
Registro em
-
Última visita
Tudo que violin101 postou
-
Caros Amigos, saudações. Por favor, me perdoa em postar uma dúvida. Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja: - caso o usuário digita o Código, mostra os dados do Produto. - caso o usuário digita a Descrição, mostra os dados do Produto Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE. <=== está funcionando certinho. Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também. o meu AutoComplete na MODEL está assim. public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } } no CONTROLLER está assim: public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } } na VIEW está assim: <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div> VIEW + JAVASCRIPT //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete(); Grato, Cesar
-
Caros amigos, saudações. Estou com uma dúvida de validação de INPUT com função moeda. Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56 o problema é quando precisa atualizar o valor. Quando o usuário atualizar o input fica assim: 1.234, como faço para atualizar as casas decimais, conforme o valor for sendo alterado ? o input está assim: <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div> a função para formatar o input para moeda está assim: obs.: a Função CalcProd está executando corretamente function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; } Grato, Cesar
-
Amigos, saudações. Consegui resolver o meu problema, não sei se é a forma mais correta, mas de uma certa forma solucionou o problema. O código ficou assim: Formulário - INPUT <div class="col-md-2"> <label for="">Contagem Estoque </label> <input type="text" class="form-control" id="qtde" name="qtde" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" onblur="calcProd()" onkeyup="formata(this);" > </div> O Javascript function formata(i) { //Adiciona os dados para a másrcara var decimais = 2; var separador_milhar = '.'; var separador_decimal = ','; var decimais_ele = Math.pow(10, decimais); var thousand_separator = '$1'+separador_milhar; var v = i.value.replace(/\D/g,''); v = (v/decimais_ele).toFixed(decimais) + ''; var splits = v.split("."); var p_parte = splits[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, thousand_separator); (typeof splits[1] === "undefined") ? i.value = p_parte : i.value = p_parte+separador_decimal+splits[1]; } function id(valor_campo){ return document.getElementById(valor_campo); } function getValor(valor_campo){ var valor = document.getElementById(valor_campo).value.replace( ',', '.'); return parseFloat( valor ) * 100; } function calcProd() { var total = getValor('qtde') - getValor('estoqprod'); var vlrtotals = total / 100 ; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); id('qtdeTotal').value = vlrtotal; }
-
Caros amigos, saudações. Desculpa postar minha dúvida, fiz várias pesquisa mas não tive sucesso. Como faço para capturar o ID do SELECT selecionado e passar para base_url ? Exemplo: após selecionar o ID passar para <?php echo base_url();?>estoque/ajuste/adicionar/ <== passar o ID aqui. <div class="col-md-6"> <label for="tipoDepart" class="control-label">Departamento:</label> <select name="tipoDepart" id="tipoDepart" style="width:100%;" class="form-control"> <option value="">Selecione um Departamento</option> <?php foreach ($dprts as $dp) { echo '<option value="'.$dp->idDepartamento.'">'.$dp->departamento.'</option>'; } ?> </select> </div> <div class="col-md-6"> <div class="card card-entrad"> <div class="card-header"> <label class="card-tlentr">Entrada - Estoque</label> </div> <div class="card-body"> <div style="text-align:center;"> <a href="<?php echo base_url();?>estoque/ajuste/adicionar/" <== COMO PASSO O ID SELECIONADO AQUI, PARA ABRIR A PÁGINA COM O ID DO DPTO ? class="btn btn-cinza">Adicionar</a> </div> </div> </div> </div> Observação: preciso capturar e passar o ID para gerar TABELA referente a cada departamento. Grato, Cesar
-
Saudações, amigo Albano. Muito obrigado.
-
PHP - Passar valor para o INPUT vindo do AJAX em formato moeda
violin101 postou um tópico no fórum PHP
Caros amigos, saudações. Tem como passar para o Formulário um Campo vindo via AJAX no formato moeda ? Tenho uma rotina onde o usuário escolhe através de uma Lista na modal de Produtos e o sistema informa o formulário os seguintes campos: código | descrição | espécie | estoque atual. o estoque atual preciso passar nesse formato, para validação de quantidade: 15.00 ou 15,00. ou seja: converter de: 15 para: 15.00 com casas decimais tem como fazer isso ? Grato, Cesar -
PHP - Passar valor para o INPUT vindo do AJAX em formato moeda
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. Nesse caso o melhor é salvar e configurar o BD como decimal ou valor moeda ? Grato, Cesar -
PHP - Passar valor para o INPUT vindo do AJAX em formato moeda
violin101 respondeu ao tópico de violin101 em PHP
Caros amigos, saudações. Após algumas pesquisas e orientação do grupo, consegui fazer a validação de QtdeDigitada X QtdeEstoque,. Observação: não sei se é a forma mais correta, mas atendeu o que preciso. Ficou assim: /*---Função para Capturar o Produto selecionado na Modal---*/ $(document).on("click",".btn-prod",function(){ prds = $(this).val(); infoprd = prds.split("*"); $("#idProdutos").val(infoprd[0]); $("#cod_interno").val(infoprd[1]); $("#descricao").val(infoprd[2]); $("#prd_unid").val(infoprd[3]); $("#estoque_atual").val(infoprd[4]); $("#modal_prod").modal("hide"); //Função para Atualizar o Status do Botão statusLimparAgregar() }); $("#btn-agregar").on("click",function(){ var qtde = document.getElementById("qtde").value; //Verifica Duplicidade de Código if (verificar(infoprd[0])) { //Chama a Modal com Alerta. $("#modal_mensagem").modal(); }else if(verificarEstoque(infoprd[4])){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); }else{ if(qtde == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { html = "<tr>"; html += "<td width='10%' height='10' style='text-align:center;'><input type='hidden' name='id_prds[]' value='"+infoprd[0]+"'>"+infoprd[0]+"</td>"; html += "<td width='32%' height='10'><input type='hidden' name='descricao[]' value='"+infoprd[2]+"'>"+infoprd[2]+"</td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='esp[]' value='"+infoprd[3]+"'>"+infoprd[3]+ "<input type='hidden' name='estoq[]' value='"+infoprd[4]+"'></td>"; html += "<td width='12%' height='10' style='text-align:center;'><input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-danger btn-remove-produto' style='margin-right: 1%; padding: 1px 2px;' title='Remover Item da Lista'>"+ "<span class='fa fa-trash'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#btn-agregar").val(null); $("#descricao").val(null); $("#cod_interno").val(null); $("#prd_unid").val(null); $("#estoque_atual").val(null); $("#qtde").val(null); //Desabilita Buttons document.getElementById("btn-limp").disabled = true; document.getElementById("btn-agregar").disabled = true; }//Fim do IF-qtde }//Fim do IF-verificar });//Fim da Função btn-agregar }); /* Remover ITEM da Lista de Produtos */ $(document).on("click",".btn-remove-produto", function(){ $(this).closest("tr").remove(); //Função para Somar os Itens do Lançamento somar(); //Função para Atualizar o Status do Botão statusButton(); }); //Função para Impedir Duplicidade de Produtos function verificar(idProdutos){ var existe = 0; $('input[name^="id_prds"]').each(function() { if ($(this).val() == idProdutos) { existe = 1; } }); return existe; } //Função para Impedir Quantidade maior que do Estoque function verificarEstoque(){ //Variável para retonar o resultado var exists = 0; //Variáveis recebe o valor do Formulário var qts = document.getElementById('qtde').value; var stq = document.getElementById('estoque_atual').value; // Substitui vírgula por ponto, remove caracteres não numéricos e converte para float valorQtde = parseFloat(qts.replace(/[^\d,-]/g, '').replace(',', '.')); valorEstq = parseFloat(stq.replace(/[^\d,-]/g, '').replace(',', '.')); if(valorQtde > valorEstq){ exists = 1; //Limpa Inputs e Button $("#btn-agregar").val(null); $("#descricao").val(null); $("#cod_interno").val(null); $("#prd_unid").val(null); $("#estoque_atual").val(null); $("#qtde").val(null); } return exists; } -
PHP - Passar valor para o INPUT vindo do AJAX em formato moeda
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. Obrigado pela a dica acima. Estou com o seguinte problema. Quando salvo as entrada de produtos no MySql, salvo a quantidade neste formato: 123.45 <== usando ponto O problema é quando vou fazer o consumo, preciso fazer uma validação para não digitar acima do estoque real, ou seja, 123.45. o erro que estou encontrando é: estoque real: 123.45 consumo.....: 2.00 <== aqui dá erro, pois o sistema entende que 2 é maior que 123.45 o JS me traz as informações correta do BD é somente nessa validação que não estou entendendo este erro. Observação: para nesse caso preciso salvar a quantidade no formato BRASILEIRO, pois alguns produtos utiliza quantidade após a virgula ou ponto. o form está assim: <div class="col-md-2"> <div class="form-group"> <label for="">Estoque Atual</label> <input type="text" class="form-control" id="estoque_atual" name="estoque_atual" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" disabled > </div> </div> <!--A modal carrega os Dados do MySql para selecionar o produto. --> <div class="modal fade" id="modal_prod"> <div class="modal-dialog modal-xl"> <div class="modal-content"> <div class="modal-header" style="font-size:18px; color:#ffffff; background:#307192;"> <h4 class="modal-title"><strong>Lista do(s) Produto(s) por Departamento(s)</strong></h4> </div> <div class="modal-body"> <table id="tab_prod" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center;">Cód. Interno</th> <th style="text-align:center;">Descrição</th> <th style="text-align:center;">ESP</th> <th style="text-align:center;">QTDE</th> <th style="text-align:center;">Ação</th> </tr> </thead> <tbody> <?php foreach ($lanca as $lnc) { //Variável criada para carregar informação dos Dados para o Botão $datalnc = $lnc->idProdutos."*".$lnc->cod_interno."*".$lnc->descricao."*".$lnc->prd_unid."*".$lnc->estoque_atual; echo '<tr>'; echo '<td width="20" height="10" style="text-align:center;">'.$lnc->idProdutos.'</td>'; echo '<td width="250" height="10" style="text-align:left;">'.$lnc->descricao.'</td>'; echo '<td width="20" height="10" style="text-align:center;">'.$lnc->prd_unid.'</td>'; echo '<td width="20" height="10" style="text-align:center;">'.number_format($lnc->estoque_atual, 2, ",", ".").'</td>'; echo '<td width="20" style="text-align:center;"> <button type="button" class="btn btn-success btn-prod" style="margin-right: 2%; padding: 2px 3px;" title="Selecionar Produto" value="'. $datalnc.'" > <span class="fa fa-check"></span> </button></td>'; echo '</tr>'; }//Fim do Foreach ?> </tbody> </table> </div> <div class="modal-footer justify-content-center" style="background:#BBAAAA;"> <button type="button" class="btn btn-danger pull-center" data-dismiss="modal">Voltar</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div> o JAVASCRIPT, trago assim: /*---Função para Capturar o Produto selecionado na Modal---*/ $(document).on("click",".btn-prod",function(){ prds = $(this).val(); infoprd = prds.split("*"); $("#idProdutos").val(infoprd[0]); $("#cod_interno").val(infoprd[1]); $("#descricao").val(infoprd[2]); $("#prd_unid").val(infoprd[3]); $("#estoque_atual").val(infoprd[4]); //Campo com os dados do ESTOQUE, ou seja, quantidade: 123.45 $("#modal_prod").modal("hide"); //Função para Atualizar o Status do Botão statusLimparAgregar() }); Grato, Cesar -
PHP - Passar valor para o INPUT vindo do AJAX em formato moeda
violin101 postou um tópico no fórum PHP
Caros amigos, saudações. Tem como passar para o Formulário um Campo vindo via AJAX no formato moeda ? Tenho uma rotina onde o usuário escolhe através de uma Lista na modal de Produtos e o sistema informa o formulário os seguintes campos: código | descrição | espécie | estoque atual. o estoque atual preciso passar nesse formato, para validação de quantidade: 15.00 ou 15,00. tem como fazer isso ? Grato, Cesar -
JavaScript - Orientação em passar parametro para Controller
violin101 respondeu ao tópico de violin101 em Javascript
Caros amigos, alguém por favor, pode me dar uma dica ? grato, Cesar -
JavaScript - Orientação em passar parametro para Controller
violin101 postou um tópico no fórum Javascript
Caros amigos, saudações. Estou com uma dúvida e não estou conseguindo resolver. Tenho um SELECT onde eu pego o ID e NOME_CAMPO, até aqui tudo bem. Para evitar erros de saída de produtos por estoque, preciso passar o ID do Centro de Custo, para gerar a Tabela de produtos em estou por cada centro de Custo. Exemplo: Centro de Custo 1 - tem: produto A | produto B | produto C Centro de Custo 2 - tem: produto D | produto E Como consigo pegar via JAVASCRIPT o código do Centro de Custo selecionado e passar para a Controller, para chamar a MODAL ? meu código está assim: VIEW <div class="col-md-6"> <label for="deptsOrigem">Dpto Origem:</label> <div class="input-group mb-3"> <input type="hidden" name="idCentrocusto" id="idCentrocusto"> <input type="text" class="form-control" id="nameCentrocusto" name="nameCentrocusto" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por Centro de Custo" disabled> <span class="input-group-btn"> <button class="btn btn-primary" type="button" id="btnOrgn" name="btnOrgn" data-toggle="modal" data-target="#modal_deptsOrigem" > <span class="fa fa-search"></span> Buscar </button> </span> </div> </div> <div class="modal fade" id="modal_deptsOrigem"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header" style="font-size:18px; color:#ffffff; background:#307192;"> <h4 class="modal-title"><strong>Lista do(s) Centro de Custo(s)</strong></h4> </div> <div class="modal-body"> <table id="deptsLista" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center;">Código</th> <th style="text-align:center;">Centro de Custo(s)</th> <th style="text-align:center;">Ação</th> </tr> </thead> <tbody id="itensDeptos"> <!---Monta Tabela VIA Ajax---> </tbody> </table> </div> <div class="modal-footer justify-content-center" style="background:#BBAAAA;"> <button type="button" class="btn btn-danger pull-center" data-dismiss="modal">Voltar</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div> o JAVASCRIPT está assim: //Função para Chamar o Centro de Custo que o usuário deseja. listaDeptos(); var table = $('#deptsLista').dataTable({ "searching": true, "ordering": true, "info": true, "autoWidth": false, "pageLength": 5, "lengthMenu": [ 5, 10, 25, 50 ], "responsive": true, }); // list all employee in datatable function listaDeptos(){ $.ajax({ type : 'ajax', url : '<?=base_url()?>estoque/consumo/deptsList/', async : false, dataType : 'json', success : function(data){ var html = ''; var i; for(i=0; i<data.length; i++){ var datadpts = data[i].idDepartamento+"*"+data[i].departamento; html += '<tr>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].idDepartamento+'</td>'+ '<td width="50%" style="text-align:left; font-size:16px;">'+data[i].departamento+'</td>'+ '<td width="10%" style="text-align:center;">'+ '<button type="button" class="btn btn-success btn_orgns" style="margin-right: 1%; padding: 2px 5px;" title="Selecionar Departamento" value="'+datadpts+'"><span class="fa fa-check"></span></button>'+ '</td>'+ '</tr>'; } //Fim - For $('#itensDeptos').html(html); } //Fim - success }); //Fim - ajax } //Fim - function /*---Função para Capturar o Departamento selecionado---*/ $(document).on("click",".btn_orgns",function(){ dpts = $(this).val(); infodpts = dpts.split("*"); $("#idCentrocusto").val(infodpts[0]); $("#nameCentrocusto").val(infodpts[1]); $("#modal_deptsOrigem").modal("hide"); //Função para Atualizar o Status do Botão statusPesqProd(); }); //Função para Gerar a Lista de Produtos por Centro de Custo via AJAX. listaProduts(); var table = $('#prdsLista').dataTable({ "searching": true, "ordering": true, "info": true, "autoWidth": false, "pageLength": 5, "lengthMenu": [ 5, 10, 25, 50 ], "responsive": true, }); // list all employee in datatable function listaProduts(){ $.ajax({ type : 'ajax', url : '<?=base_url()?>estoque/consumo/produtsList/', //< como passo aqui o ID do Centro de Custo Selecionado para Gerar a Lista de Produtos async : false, dataType : 'json', success : function(data){ var html = ''; var i; for(i=0; i<data.length; i++){ var prds = data[i].idProdutos+"*"+data[i].cod_interno+"*"+data[i].descricao+"*"+data[i].prd_unid+"*"+data[i].estoque_atual; html += '<tr>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].cod_interno+'</td>'+ '<td width="50%" style="text-align:left; font-size:16px;">'+data[i].descricao+'</td>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].prd_unid+'</td>'+ '<td width="15%" style="text-align:center; font-size:16px;">'+data[i].estoque_atual+'</td>'+ '<td width="12%" style="text-align:center;">'+ '<button type="button" class="btn btn-success btn-prod" style="margin-right: 1%; padding: 2px 5px;" title="Selecionar Produto" value="'+prds+'"><span class="fa fa-check"></span></button>'+ '</td>'+ '</tr>'; } //Fim - For $('#itensProds').html(html); } //Fim - success }); //Fim - ajax } //Fim - function a CONTROLLER está assim: //Função para Criar Lista - Produtos Data Tables com AJAX function produtsList(){ $data = $this->consumo_model->prodsList(); echo json_encode($data); } Grato, Cesar -
Caros amigos, saudações. Estou com uma dúvida: Como consigo fazer uma rotina no sistema onde possa fazer de forma automática trazer o resultado de entrada de produtos a cada 3 meses, por exemplo: Produtos --- Entrada --- Meses Prod_A -------- 100 ------ 01/2024 Prod_A -------- 120 ------ 03/2024 Prod_A -------- 105 ------ 04/2024 ========================= Prod_B -------- 105 ------ 02/2024 Prod_B -------- 120 ------ 03/2024 Prod_B -------- 130 ------ 04/2024 ========================= ETC Como consigo mostrar para o usuário esse movimento de entrada a cada 3 meses ? Grato, Cesar
-
PHP - Mostrar resultado tabela por Intervalo de meses
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. baseado no seu código acima, os Dados viram de um MySql. de acordo com o seu código acima, as informações são baseados em ARRAY. não sei se é a forma mais correta ou não, escrevi o código assim, de acordo com sua experiência e se estiver errado o código, o amigo pode apontar onde estou errando ? o MODEL, fico assim: public function agrupar($id){ $this->db->select('lctos_itens.*, DATE_FORMAT(dateItens, "%m/%Y") AS meses, SUM(lctos_itens.qtd_prod) as quantidade, produtos.*'); $this->db->from('lctos_itens'); $this->db->join('produtos', 'produtos.idProdutos = lctos_itens.cod_prod'); $this->db->where('lctos_itens.cod_prod', $id); $this->db->group_by('MONTH(dateItens)') ->group_by('YEAR(dateItens)'); $this->db->order_by('MONTH(dateItens)', 'DESC'); $this->db->limit(3); return $this->db->get()->result(); } no Controller, passo as informações para o Model assim: //Chamo a Função no Model, passando o ID do Produto $this->data['agrupar'] = $this->produtos_model->agrupar($id); na View, passei assim: <div class="tab-pane fade" id="agrupar" role="tabpanel" aria-labelledby="agrupar-tab"> <div class="txtProd"> <?php echo $result->cod_interno; ?> - <?php echo $result->descricao; ?> </div> <div class="card-body"> <div class="row"> <div class="col-md-" id="divRelac" style="padding: 1%; margin-left:0px;"> <table class="table" id="tab_prods"> <thead> <tr style="background-color:#BDDCDC;"> <th style="text-align:center;">MESES</th> <th style="text-align:center;">QTDE</th> </tr> </thead> <tbody> <?php foreach ($agrupar as $ag) { echo '<tr>'; echo '<td width="150" height="10" style="text-align:center;">'.$ag->meses.'</td>'; echo '<td width="150" height="10" style="text-align:center;">'.$ag->quantidade.'</td>'; echo '</tr>'; } ?> </tbody> </table> </div> </div> </div> <div class="card-footer" style="text-align:center;"> <a href="<?php echo base_url() ?>estoque/produtos" id="" class="btn btn-danger"> <i class="fa fa-undo"></i> Voltar </a> </div> </div> -
PHP - Mostrar resultado tabela por Intervalo de meses
violin101 respondeu ao tópico de violin101 em PHP
Saudações, caro amigo Williams. Tu é o cara, show. obrigado -
PHP - Ajuda com NFePhp - mistério em achar caminho
violin101 respondeu ao tópico de violin101 em PHP
Amigo Williams, saudações. Fiz a instalação da Nfephp, através deste comando. composer require nfephp-org/sped-nfe composer require nfephp-org/sped-da Instalou todas as classes é isso que não entendo. Ou vou precisar retirar o que instalou e refazer tudo outra vez. É um mistério que não entendo. -
Caros amigos, saudações. Peço desculpa em recorrer a ajuda dos amigos, pois está sendo um mistério para mim, configurar o meu sistema para Impressão de XML e NFe. Quando acrescento as linhas no início do Controller: use NFePHP\NFe\Make; use NFePHP\NFe\Tools; use NFePHP\NFe\Danfe; etc, etc. e chamo a libraries assim em alguma função: $nfe = new Make(); e etc. <== o sistema acusa que não consegue achar fiz as alterações necessárias no autoload /* |-------------------------------------------------------------------------- | Composer auto-loading |-------------------------------------------------------------------------- | | Enabling this setting will tell CodeIgniter to look for a Composer | package auto-loader script in application/vendor/autoload.php. | | $config['composer_autoload'] = TRUE; | | Or if you have your vendor/ directory located somewhere else, you | can opt to set a specific path as well: | | $config['composer_autoload'] = '/path/to/vendor/autoload.php'; | | For more information about Composer, please visit http://getcomposer.org/ | | Note: This will NOT disable or override the CodeIgniter-specific | autoloading (application/config/autoload.php) */ $config['composer_autoload'] = './vendor/autoload.php'; o meu 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" } } } após instalar a NFePhp através do composer, o caminho da pasta NFePhp está assim: nome_do_meu_sistema |____ application |______vendor |________nfephp-org |__________sped-common |__________sped-da |__________sped-gtin |__________sped-nfe Como consigo trazer os comando/libraries da NFe para poder utilizar no projeto. Grato, Cesar
-
PHP - Ajuda com NFePhp - mistério em achar caminho
violin101 respondeu ao tópico de violin101 em PHP
amigo Williams, saudações. fiz todas as alterações/verificações, conforme sua orientação mencionada acima. fiz esse exemplo para chamar a CLASS <?php defined('BASEPATH') OR exit('No direct script access allowed'); require_once FCPATH . 'vendor/autoload.php'; use NFePHP\NFe\Make; use NFePHP\DA\NFe\DanfeSimples; use NFePHP\DA\NFe\Danfe; use NFePHP\DA\NFe\Daevento; class NotaFiscalControler extends CI_Controller { public function gerarXml(){ try{ $nfe = new Make(); }catch(\Exception $e){ session()->flash('erro', $e->getMessage()); return redirect()->back(); } } } aparece esse erro: An uncaught Exception was encountered Type: Error Message: Class 'NFePHP\NFe\Make' not found Filename: C:\xampp\htdocs\sistems\application\controllers\Estoque\NotaFiscalControler.php Line Number: 16 Backtrace: File: C:\xampp\htdocs\sistems\index.php Line: 315 Function: require_once observação: na linha 16 está assim: $nfe = new Make(); no index.php o ambiente de desenvolvimento, está assim: define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); e na linha 315 do index.php raiz está assim: Linha | Comandos 308 - /* 309 - * -------------------------------------------------------------------- 310 - * LOAD THE BOOTSTRAP FILE 311 - * -------------------------------------------------------------------- 312 - * 313 - * And away we go... 314 - */ 315 - require_once BASEPATH.'core/CodeIgniter.php'; -
Amigo Williams, saudações. Consegui resolver o problema.
-
Caros amigos, saudações. Estou com uma dúvida e não estou conseguindo resolver. Tenho uma tabela onde o usuário lança a Entrada de Produtos <=== até aqui tudo bem. O problema que estou encontrando é: - após lançar os itens e se por alguma necessidade precisar fazer devolução, gostaria de alterar o STATUS do lançamento do PRODUTO de 1 para 2, ou seja: lançou: 101 - Caneta ------- 10 x 1.50 = 15,00 status = 1 102 - Lápis --------- 10 x 1.50 = 15,00 status = 1 103 - Borracha ---- 10 x 1.50 = 15,00 status = 1 104 - Apontador - 10 x 1.50 = 15,00 status = 1 Se precisar DEVOLVER os itens 102 e 103 o Status de 1 passa para 2, ou seja: 101 - Caneta ------- 10 x 1.50 = 15,00 status = 1 102 - Lápis --------- 10 x 1.50 = 15,00 status = 2 103 - Borracha ---- 10 x 1.50 = 15,00 status = 2 104 - Apontador - 10 x 1.50 = 15,00 status = 1 Obs.: como consigo filtrar o CódigoProduto + NúmeroLançamento, para não ocorrer o erro de alterar todos. O problema que estou enfrentando, quando dou o Comando para Alterar, o Sistema Altera todos os produtos lançados que estiver na base de dados, ou seja, onde tiver 102 e 103, o sistema altera. o meu código: CONTROLLER /*Salva o Detalhe do Lançamento*/ protected function save_detalhe($prods,$qtde,$vlrunit,$vlrtotal,$notaLct,$numlcto,$codslct){ for ($i=0; $i < count($prods); $i++) { $data = array( 'cod_prod' => $prods[$i], 'qtd_prod' => $qtde[$i], 'vlr_unit' => $vlrunit[$i], 'vlr_total' => $vlrtotal[$i], 'status' => 2, 'devitens' => 2, 'n_nf' => $notaLct, 'lancamentos_idlcto'=> $numlcto, ); //Função para Salvar os Detalhes do lançamento $this->devolucao_model->save_detalhe($data); //Função para Atualizar a Quantidade de Produto no Estoque $this->update_produto($prods[$i],$qtde[$i],$vlrunit[$i],$vlrtotal[$i]); //Função para Alterar Devolução do Item $this->upd_itens($prods[$i],$notaLct[$i],$codslct[$i]); } } /*<=== até aqui tudo certo, como deve ser feito*/ /* * O Problema está aqui * para não ocorrer duplicidade de Lançamento, * o sistema altera o Status do 1º. lançamento */ protected function upd_itens($idprds,$notaLct,$codslct){ $data = array( 'devitens' => 2, ); $this->devolucao_model->update_itens($idprds,$data); } MODEL: //Altera o Campo Devolução do Item Lançado //Altera todos os código de produto que encontrar public function update_itens($idprds,$data){ $this->db->where("cod_prod",$idprds); return $this->db->update("lctos_itens",$data); } Grato, Cesar
-
Caros amigos, saudações. Estou com uma dúvida e não consigo entender, fiz várias pesquisas e tentativas antes de recorrer aos amigos. Tenho uma CLASS e quando chamo dentro de um CONTROLLER o sistema acusa que não acha o caminho da CLASS. Como consigo fazer para o sistema localizar/chamar a CLASS dentro do Controller ? a classe está assim: <?php namespace Servicos; use NFePHP\NFe\Make; use NFePHP\NFe\Tools; error_reporting(E_ALL); ini_set('display_errors', 'On'); class NFeServicos{ public function __construct($config, $empresas){ //codes... } } Controller: <?php defined('BASEPATH') OR exit('No direct script access allowed'); use NFePHP\Common\Certificate; use NFePHP\DA\NFe\Danfe; use Servicos\NFeServico; //chamo a class class NotaFiscal extends CI_Controller { public function gerarXml() { $id = $this->input->post('idLct'); $this->load->model('estoque/lancamentos_model', '', true); $venda = $this->lancamentos_model->getById($id); $nfe = new NFeServico(); //<o erro acontece aqui, não localiza. } } Grato, Cesar
-
Amigo Williams, saudações. Se no Composer.json eu colocar as seguinte linhas de comando, fica genérico, para o projeto todo ? "autoload": { "psr-4": { "Libraries\\": "application/libraries" } } Grato, Cesar
-
Amigo Williams, saudações. O código acima foi um exemplo do erro que estou encontrando. Quando instalei o NFEPHP pelo o Composer, foi gravado dentro da pasta VENDOR. Mesmo quando escrevo: $nfe = New Make(); Também não encontra a CLASS. Preciso fazer o procedimento acima com o: Composer dump-autoload ? Grato, Cesar
-
Caro amigo. Instalei o NFePhp através do composer.
-
Caros amigos, saudações. Primeiramente agradeço ao auxílio e ajuda que os amigos têm me dado. Minha dúvida: - para emissão de nota fiscal eletrônica precisa de um CERTIFICADO e SENHA. Como ou onde consigo esses dois itens, para fazer teste de emissão de nota fiscal ? Grato, Cesar