Jump to content

POWERED BY:

violin101

Members
  • Content count

    303
  • Joined

  • Last visited

Everything posted by violin101

  1. violin101

    Orientação - Jav + MySql

    Caros amigos, saudações. Estou enfrentando um problema que não consigo entender. Após Instalar o MySql versão 8.0.36, funciona corretamente realizando as conexões. O problema é: ---[ após reiniciar o micro, o MySql não faz as conexões. --[ tenta localizar este arquivo, mas não acha: my.ini Onde localizo ou configuro este arquivo na Pasta MySql ? Grato, Cesar
  2. violin101

    JAVA - Ajuda com erro.

    Caros amigos, saudações. Estou escrevendo um Sistema Java Web e quando clico no Botão Salvar, o Java acusa esse erro: ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null Já tentei de várias formas resolver esse problema, mas não estou conseguindo. Por favor, alguém pode me ajudar identificar a origem e resolver o problema acima ? Grato, Cesar
  3. violin101

    JAVA - Ajuda com erro.

    Caros amigos, alguém por favor pode me ajudar a identificar e corrigir esse erro, que está me deixando louco. ERROR: br.com.systemweb.model.dao.impl.CustomerDaoImpl.getObjectByTypeDocAndNumdoc Error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where c.c_type_doc='1' and c.c_num_doc='12345678' ' at line 1 ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null OBSERVAÇÃO: não entendo porque o sistema me traz essa linha assim ==[ c.c_num_doc='12345678' ' ]=== o CustomerDao, está assim: package br.com.systemweb.model.dao; import br.com.systemweb.model.Customer; import java.util.Map; /** * * @author rctom */ public interface CustomerDao { public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc); public int saveObject(Map<String,Object>requestBody); } o CustomerDaoImpl, está assim: import br.com.systemweb.config.ConexaoDB; import br.com.systemweb.constants.ConstantMenssages; import br.com.systemweb.model.Customer; import br.com.systemweb.model.Departament; import br.com.systemweb.model.District; import br.com.systemweb.model.Province; import br.com.systemweb.model.Ubigeo; import br.com.systemweb.model.dao.CustomerDao; import br.com.systemweb.utils.Utils; import java.util.Map; import java.sql.*; import java.util.HashSet; import java.util.Set; import java.util.logging.Logger; import java.util.logging.Level; /** * * @author rctom */ public class CustomerDaoImpl implements CustomerDao{ private static final Logger LOGGER = Logger.getLogger(CustomerDaoImpl.class.getName()); @Override public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc) { Customer customer = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; StringBuilder query = new StringBuilder(); query.append("select "); query.append(" c.n_id_customer"); query.append(" ,c.c_code"); query.append(" ,c.c_type_doc"); query.append(" ,c.c_num_doc"); query.append(" ,c.c_business_name"); query.append(" ,p.n_id_person"); query.append(" ,p.c_name"); query.append(" ,p.c_first_name"); query.append(" ,p.c_last_name"); query.append(" ,p.c_civil_status"); query.append(" ,p.d_date_birth"); query.append(" ,p.c_gender"); query.append(" ,c.c_address"); query.append(" ,c.c_phone_main"); query.append(" ,c.c_email_main"); query.append(",u.n_id_ubigeo "); query.append(",u.c_departament_inei "); query.append(",u.c_departamento "); query.append(",u.c_provincia_inei "); query.append(",u.c_provincia "); query.append(",u.c_ubigeo_inei "); query.append(",u.c_distrito "); query.append(" from m_customer c inner join m_person p "); query.append(" On c.n_id_person=p.n_id_person left join m_ubigeo u "); query.append(" where c.c_type_doc=? and c.c_num_doc=?"); try { conn = ConexaoDB.getConnection(); ps = conn.prepareStatement(query.toString()); ps.setString(1,typeDoc); ps.setString(2,numDoc.trim()); rs = ps.executeQuery(); while (rs.next()) { customer = new Customer(); customer.setCustomerId(rs.getInt("n_id_customer")); customer.setCustomerCode(rs.getString("c_code")); customer.setTypeDoc(rs.getString("c_type_code")); customer.setNumDoc(rs.getString("c_num_doc")); customer.setBussinesName(rs.getString("c_business_name")); customer.setPersonId(rs.getInt("n_id_person")); customer.setName(rs.getString("c_name")); customer.setFirstName(rs.getString("c_first_name")); customer.setLastName(rs.getString("c_last_name")); customer.setCivilState(rs.getString("c_civil_status")); customer.setGender(rs.getString("c_gender")); customer.setBirthDate(Utils.convertStringToLocalDate(rs.getString("d_date_birth"))); customer.setAddress(rs.getString("c_address")); customer.setNumberPhone(rs.getString("c_phone_main")); customer.setEmail(rs.getString("c_email_main")); customer.setUbigeo(new Ubigeo(rs.getInt("n_id_ubigeo"), new Departament(rs.getString("c_departamento_inei"), rs.getString("c_departamento")), new Province(rs.getString("c_provincia_inei"), rs.getString("c_provincia")), new District(rs.getString("c_ubigeo_inei"), rs.getString("c_distrito")))); } } catch (SQLException e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); } catch (Exception e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); throw new RuntimeException(e.getLocalizedMessage()); } finally { try { if(rs != null){ rs.close(); } if(ps != null){ ps.close(); } if(conn != null){ ConexaoDB.releaseConnection(conn); } } catch (SQLException e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); } } if(customer == null){ throw new NullPointerException(ConstantMenssages.MESSAGE_VAL_510); } return customer; } @Override public int saveObject(Map<String, Object> requestBody) { int r = 0; int personId = 0; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; if(requestBody.get("typeDoc").toString().equals("6")){ mappingRequestToValidadeEmptyOrNullBusiness(requestBody); } else { mappingRequestToValidadeEmptyOrNullPerson(requestBody); } //Validar Número do Documento Informado Utils.validTypeAndNumberDoc(requestBody.get("typeDoc").toString(), requestBody.get("numDoc").toString()); StringBuilder queryInsertPerson = new StringBuilder(); queryInsertPerson.append("INSERT INTO m_person("); queryInsertPerson.append("c_name"); queryInsertPerson.append(",c_first_name"); queryInsertPerson.append(",c_last_name"); queryInsertPerson.append(",c_civil_status"); queryInsertPerson.append(",c_gender"); queryInsertPerson.append(",d_date_birth"); queryInsertPerson.append(",c_state"); queryInsertPerson.append(")values(?,?,?,?,?,?,?)"); StringBuilder queryInsertCustomer = new StringBuilder(); queryInsertCustomer.append("INSERT INTO m_customer("); queryInsertCustomer.append("c_code"); queryInsertCustomer.append(",c_type_doc"); queryInsertCustomer.append(",c_num_doc"); queryInsertCustomer.append(",c_business_name"); queryInsertCustomer.append(",c_address"); queryInsertCustomer.append(",c_phone_main"); queryInsertCustomer.append(",c_email_main"); queryInsertCustomer.append(",c_create_user"); queryInsertCustomer.append(",n_id_person"); queryInsertCustomer.append(",n_id_ubigeo"); queryInsertCustomer.append(",c_state"); queryInsertCustomer.append(")values(?,?,?,?,?,?,?,?,?,?,?)"); try { //Pessoa conn = ConexaoDB.getConnection(); ps = conn.prepareStatement(queryInsertPerson.toString(), PreparedStatement.RETURN_GENERATED_KEYS); ps.setString(1, requestBody.get("name").toString().trim().toUpperCase()); ps.setString(2, requestBody.get("firstName").toString().trim().toUpperCase()); ps.setString(3, requestBody.get("lastName").toString().trim().toUpperCase()); ps.setString(4, requestBody.get("selectCivilState").toString().trim()); ps.setString(5, requestBody.get("selectGender").toString().trim()); ps.setString(6, requestBody.get("birthDate").toString().trim()); ps.setString(7, "A"); r = ps.executeUpdate(); rs = ps.getGeneratedKeys(); while (rs.next()) { personId = rs.getInt(1); } //Cliente ps = conn.prepareStatement(queryInsertCustomer.toString(), PreparedStatement.RETURN_GENERATED_KEYS); ps.setString(1, "C".concat(Utils.generateCodeWithDate())); ps.setString(2, requestBody.get("typeDoc").toString().trim()); ps.setString(3, requestBody.get("numDoc").toString().trim()); ps.setString(4, requestBody.get("businessName").toString().trim().toUpperCase()); ps.setString(5, requestBody.get("address").toString().trim()); ps.setString(6, requestBody.get("numberPhone").toString().trim()); ps.setString(7, requestBody.get("email").toString().trim()); ps.setString(8, requestBody.get("sessionUser").toString().trim()); ps.setInt(9, personId); ps.setInt(10, 1); /*Agregar de forma Dinamica*/ ps.setString(11, "A"); r = ps.executeUpdate(); } catch (SQLException e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); } catch (Exception e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); throw new RuntimeException(e.getLocalizedMessage()); } finally { try { if(rs != null){ rs.close(); } if(ps != null){ ps.close(); } if(conn != null){ ConexaoDB.releaseConnection(conn); } } catch (SQLException e) { LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage()); } } return r; } private void mappingRequestToValidadeEmptyOrNullPerson(Map<String,Object>requestBody){ for (Map.Entry<String,Object>entry:requestBody.entrySet()) { if(mandatoryColumnsPerson().contains(entry.getKey())){ Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString()); } } if(requestBody.get("birthDate").toString().isBlank()){ requestBody.put("birthDate","1900-01-01"); } } private void mappingRequestToValidadeEmptyOrNullBusiness(Map<String,Object>requestBody){ for (Map.Entry<String,Object>entry:requestBody.entrySet()) { if(mandatoryColumnsBusiness().contains(entry.getKey())){ Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString()); } } if(requestBody.get("birthDate").toString().isBlank()){ requestBody.put("birthDate","1900-01-01"); } } private Set<String> mandatoryColumnsBusiness(){ Set<String> columns = new HashSet<>(); columns.add("businessName"); columns.add("typeDoc"); columns.add("numDoc"); columns.add("email"); return columns; } private Set<String> mandatoryColumnsPerson(){ Set<String> columns = new HashSet<>(); columns.add("name"); columns.add("firstName"); columns.add("lastName"); columns.add("typeDoc"); columns.add("numDoc"); columns.add("email"); return columns; } }
  4. Caros amigos, saudações. Por favor, preciso de ajuda em Relação a Instalar o Jasper Reports no Eclipse, pois a opção de Eclipse Marketplace, não encontra para instalar. Já tentei de todas as formas mas não consegui, alguém conhece alguma rotina explicando este procedimento ? Grato, Cesar
  5. violin101

    Java - Ajuda para Instalar o Jasper Reports no Eclipse

    Caro amigo Omar, saudações. Estou usando o Eclipse v4.5.2. Conforme sua orientação acima, o Jasper Reports pelo o que entendi, não é mais uma plataforma aberta como antes. Minha dúvida: - após baixar o o Jasper diretamente do Site, como faço para interagir/implementar aos meus arquivos no Eclipse ? Tem alguma vídeo aula, explicando esta parte ? Grato, Cesar
  6. violin101

    Java - Ajuda para Instalar o Jasper Reports no Eclipse

    Pessoal, alguém por favor pode me ajudar ? Atenciosamente , Cesar
  7. violin101

    JAVA - Orientação em Instalação do JBoss Tools no Eclipse

    Caros amantes da informática. Saudações. Após algumas tentativas sem sucesso e muita pesquisa, consegui resolver o problema de Instalação do JBoss Tools no Eclipse. Segui as instruções deste site e deu certo, link abaixo: https://docs.jboss.org/tools/4.0.1.Final/en/GettingStartedGuide/html/ch01.html Espero ajudar quem tiver dúvida como eu tive. Grato, Cesar
  8. Caros amantes da informática. Saudações. Estou usando o Eclipse Mars versão 4.5.0 e o 4.5.2, acredito que deva ter versões mais novas. Sou novato em JAVA e estou encontrando alguns problema em Instalação de alguns plugins, como por exemplo: 1) quando tento instalar o JBoss Tools através do Eclipse Marteplace, o Eclipse não o encontra na lista de plugins. 2) se tento instalar através do Install New Software, abaixa alguns arquivos, mas também não instala o JBoss. 3) se abro o site e arrasto o download para a área de trabalho do Eclipse, também não instala o JBoss. Caros amigos, existe outra alguma forma de instalar o JBoss Tools no Eclipse e como seria ? Grato, Cesar
  9. 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
  10. violin101

    PHP+Codeigniter - Dúvida referente a PDV

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

    PHP+Codeigniter - Dúvida em Relação a Teclas

    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
  12. 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
  13. 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
  14. Caro amigo, Williams. Obrigado, tu és 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10...
  15. 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
  16. violin101

    Javascript - Calcular Valores Monetário em Tempo Real

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

    PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto

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

    PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto

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

    PHP+Codeigniter - Adicionar Registro Plano de Contas

    Caro amigo Williams saudações. Deus o abençoa, deu certo, obrigado, Atenciosamente, Cesar
  22. violin101

    PHP+Codeigniter - Adicionar Registro Plano de Contas

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

    PHP+Codeigniter - Adicionar Registro Plano de Contas

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

    PHP+Codeigniter - Adicionar Registro Plano de Contas

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

    PHP+Codeigniter - Adicionar Registro Plano de Contas

    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
×

Important Information

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