Jump to content

POWERED BY:

violin101

Members
  • Content count

    303
  • Joined

  • Last visited

Posts posted by violin101


  1. 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;
        }    
        
    }

     

     

     

     


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


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


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


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


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

     

     


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


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

     


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


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


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

     

     


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

     


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


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

     

     

     


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


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





     


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










     

×

Important Information

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