Jump to content

violin101

Members
  • Content count

    256
  • Joined

  • Last visited

Everything posted by violin101

  1. violin101

    PHP - Buscar por Código e Descrição

    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
  2. Caros amigos, saudações. Estou com um problema de cálculo que não estou conseguindo resolver. Tenho uma rotina em Javascript que faz o seguinte cálculo qtde x vrUnit = total. qtde x vrUnit = total 1,23 x 1,00 = 1,23 << até aqui tudo bem. o problema seria fazer o arredondamento para cima para impedir de fazer este cálculo: 0,01 x 0,01 = 0,0001 para digitar o valor estou utilizando esta função: /*Esta função quando o usuário digitar o valor aparece * 1,23 */ function formataDigitacao(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]; } /*Esta função faz a multiplicação entre Valor Unitário X Quantidade *faz a multiplicação correta */ function calcProd(){ //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(",","."); //Obter valor digitado do produto var valor_unit = document.getElementById("vlrunit").value; //Remover ponto e trocar a virgula por ponto while (valor_unit.indexOf(".") >= 0) { valor_unit = valor_unit.replace(".", ""); } valor_unit = valor_unit.replace(",","."); //Calcula o Valor do Desconto if (valor_unit > 0 && prod_qtde > 0) { calc_total_produto = (parseFloat(valor_unit) * parseFloat(prod_qtde)); var numero = calc_total_produto.toFixed(2).split('.'); //<<== aqui faço o arredondamento das casas decimais de 1,234 p/ 1,23 numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("vlrtotal").value = numero.join(','); } else { if (valor_unit > 0) { document.getElementById("vlrtotal").value = document.getElementById("vlrunit").value; } else { document.getElementById("vlrtotal").value = "0,00"; } } } Grato, Cesar
  3. violin101

    PHP - Atualizar INPUT com função moeda

    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
  4. violin101

    PHP - Atualizar INPUT com função moeda

    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; }
  5. violin101

    PHP - Atualizar INPUT com função moeda

    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
  6. violin101

    PHP - Capturar ID do SELECT

    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
  7. violin101

    PHP - Capturar ID do SELECT

    Saudações, amigo Albano. Muito obrigado.
  8. 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
  9. violin101

    PHP - Passar valor para o INPUT vindo do AJAX em formato moeda

    Amigo Williams, saudações. Nesse caso o melhor é salvar e configurar o BD como decimal ou valor moeda ? Grato, Cesar
  10. violin101

    PHP - Passar valor para o INPUT vindo do AJAX em formato moeda

    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; }
  11. violin101

    PHP - Passar valor para o INPUT vindo do AJAX em formato moeda

    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
  12. 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
  13. Caros amigos, alguém por favor, pode me dar uma dica ? grato, Cesar
  14. 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
  15. 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
  16. violin101

    PHP - Mostrar resultado tabela por Intervalo de meses

    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> &nbsp; </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>
  17. violin101

    PHP - Mostrar resultado tabela por Intervalo de meses

    Saudações, caro amigo Williams. Tu é o cara, show. obrigado
  18. violin101

    PHP - Ajuda com NFePhp - mistério em achar caminho

    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.
  19. 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
  20. violin101

    PHP - Ajuda com NFePhp - mistério em achar caminho

    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';
  21. violin101

    PHP - Update MySql - bloquear duplicidade

    Amigo Williams, saudações. Consegui resolver o problema.
  22. violin101

    PHP - Update MySql - bloquear duplicidade

    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
  23. 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
  24. violin101

    PHP+Codeigniter - Não acha o Caminho da CLASS

    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
  25. violin101

    PHP+Codeigniter - Não acha o Caminho da CLASS

    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
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.