Estou tentando gerar uma sugestão do proximo código do plano de contas mas a minha função não esta fazendo corretamente e não estou conseguindo ter o código correto, no caso abaixo quando eu clicar em uma conta 2.1 ele deve me sugerir 2.1.1 se ja tiver ele sugere o proximo disponivel naquela hierarquia e assim para os de mais , alguem ja vez isso ou e tem uma dica vou disponibilizar meu codigo ele faz uma coisa semelhamente mas ele incrementa mais um depois e não ta fazendo correto
2 Passivo
2.1 Passivo Circulante
2.1.1 Impostos
2.1.1.1 FUNRURAL
2.1.1.2 ICMS ST
2.1.2 Contas a Pagar
2.1.2.1 Fornecedores
2.1.2.2 Produtores
2.1.2.3 Compradores
2.1.2.4 Motoristas
2.2 Passivo Não Circulante
2.2.1 Empréstimo bancário (longo prazo)
2.2.1.1 Empréstimo banco
```
<script>
// Obtém a lista de contas
const contas = document.querySelectorAll('.conta');
// Adiciona um ouvinte de evento para cada conta
contas.forEach(conta => {
conta.addEventListener('click', () => {
// Obtém o código da conta clicada
const codigoAtual = conta.getAttribute('data-codigo');
// Calcula o próximo código considerando o nível
const proximoCodigo = calcularProximoCodigo(codigoAtual);
// Verifica se o próximo código já existe no mesmo nível
const proximoCodigoExiste = verificarExistenciaCodigo(proximoCodigo);
if (proximoCodigoExiste) {
alert(`O próximo código ${proximoCodigo} já existe no mesmo nível.`);
} else {
// Exibe o próximo código
//document.getElementById('proximo-codigo').innerText = `Próximo código: ${proximoCodigo}`;
$('#codestrutural').val(proximoCodigo);
$('#cadcontasmodal').modal('show');
var set = setInterval(function(){
$('#desc').focus();
clearInterval(set);
},600);
}
});
});
// Função para calcular o próximo código com base no código atual e nível
function calcularProximoCodigo(codigoAtual) {
// Quebra o código atual em partes
const partes = codigoAtual.split('.');
if(partes.length == 1){
// Se for o primeiro nível, adiciona '.1'
const proximoCodigo = partes[0]+'.1';
return proximoCodigo;
}else{
const ultimoNumero = parseInt(partes.pop(), 10) + 1;
// Adiciona o novo número à lista
partes.push(ultimoNumero);
// Junta as partes para formar o novo código
const proximoCodigo = partes.join('.');
return proximoCodigo;
}
// Incrementa o último número
}
// Função para verificar se um código já existe no mesmo nível
function verificarExistenciaCodigo(proximoCodigo) {
// Obtém todos os elementos da tabela com a classe 'conta'
const contas = document.querySelectorAll('.conta');
// Extrai o nível do próximo código
const nivelProximoCodigo = proximoCodigo.split('.').length;
// Verifica se o código já existe no mesmo nível
for (const conta of contas) {
const codigoExistente = conta.getAttribute('data-codigo');
const nivelCodigoExistente = codigoExistente.split('.').length;
if (nivelProximoCodigo === nivelCodigoExistente && codigoExistente.startsWith(proximoCodigo)) {
return true;
}
}
return false;
}
</script>
```