@php use App\Enum\StatusVenda; $title = 'Nova Venda'; @endphp

Nova Venda

Cadastre uma nova venda no sistema
Dados da Venda
@csrf
Por favor, informe a data da venda.
Por favor, informe a data de vencimento.
Por favor, selecione o cliente.
Por favor, selecione a forma de pagamento.
Itens da Venda
# Tipo Item Descrição Qtd Unidade Valor Unit. Total Ações
1
Selecione o tipo
Subtotal: R$ 0,00
Desconto %
R$ 0,00
Total: R$ 0,00
// Alterar tipo de item (SERVICO ou PRODUTO) function alterarTipoItemVenda(select, index) { const tipo = select.value; const row = select.closest('tr'); const campoServico = row.querySelector('.campo-servico'); const campoProduto = row.querySelector('.campo-produto'); const placeholder = row.querySelector('.placeholder-item'); campoServico.value = ''; campoProduto.value = ''; row.querySelector('.valor-unitario-item').value = '0,00'; row.querySelector('.valor-total-item').value = '0,00'; if (tipo === 'SERVICO') { campoServico.style.display = 'block'; campoProduto.style.display = 'none'; placeholder.style.display = 'none'; campoServico.required = true; campoProduto.required = false; campoProduto.value = ''; } else if (tipo === 'PRODUTO') { campoServico.style.display = 'none'; campoProduto.style.display = 'block'; placeholder.style.display = 'none'; campoProduto.required = true; campoServico.required = false; campoServico.value = ''; } else { campoServico.style.display = 'none'; campoProduto.style.display = 'none'; placeholder.style.display = 'block'; campoServico.required = false; campoProduto.required = false; } calcularTotaisVenda(); } function buscarDadosServicoVenda(select, index) { const option = select.options[select.selectedIndex]; const row = select.closest('tr'); if (option.value) { const valor = option.getAttribute('data-valor') || '0'; const unidade = option.getAttribute('data-unidade'); const valorFormatado = parseFloat(valor).toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); row.querySelector('.valor-unitario-item').value = valorFormatado; if (unidade) { row.querySelector('.unidade-item').value = unidade; } calcularTotalItemVenda(index); } } function buscarDadosProdutoVenda(select, index) { const option = select.options[select.selectedIndex]; const row = select.closest('tr'); if (option.value) { const valor = option.getAttribute('data-valor') || '0'; const unidade = option.getAttribute('data-unidade'); const valorFormatado = parseFloat(valor).toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); row.querySelector('.valor-unitario-item').value = valorFormatado; if (unidade) { row.querySelector('.unidade-item').value = unidade; } calcularTotalItemVenda(index); } } function calcularTotalItemVenda(index) { const rows = document.querySelectorAll('#itensVenda tr'); const row = rows[index]; if (!row) return; const quantidade = parseFloat(row.querySelector('.quantidade-item').value) || 0; const valorUnitarioStr = row.querySelector('.valor-unitario-item').value || '0'; const valorUnitario = parseFloat(valorUnitarioStr.replace(/\./g, '').replace(',', '.')) || 0; const total = quantidade * valorUnitario; const totalFormatado = total.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); row.querySelector('.valor-total-item').value = totalFormatado; calcularTotaisVenda(); } function calcularTotaisVenda() { let subtotal = 0; document.querySelectorAll('.valor-total-item').forEach(input => { const valor = parseFloat(input.value.replace(/\./g, '').replace(',', '.')) || 0; subtotal += valor; }); const descontoPercent = parseFloat(document.getElementById('descontoVenda').value) || 0; const valorDesconto = (subtotal * descontoPercent) / 100; const total = subtotal - valorDesconto; document.getElementById('subtotalVenda').textContent = 'R$ ' + subtotal.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); document.getElementById('subtotalVendaHidden').value = subtotal; document.getElementById('valorDescontoVenda').textContent = 'R$ ' + valorDesconto.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); document.getElementById('valorDescontoVendaHidden').value = valorDesconto; document.getElementById('totalVenda').textContent = 'R$ ' + total.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); document.getElementById('totalVendaHidden').value = total; } function adicionarItemVenda() { const tbody = document.getElementById('itensVenda'); const rows = tbody.querySelectorAll('tr'); const newIndex = rows.length; const novoNumero = newIndex + 1; const primeiraLinha = rows[0]; const novaLinha = primeiraLinha.cloneNode(true); novaLinha.setAttribute('data-index', newIndex); novaLinha.querySelector('td:first-child').textContent = novoNumero; novaLinha.querySelectorAll('[name^="itens["]').forEach(input => { const name = input.getAttribute('name'); const newName = name.replace(/\[\d+\]/, `[${newIndex}]`); input.setAttribute('name', newName); }); novaLinha.querySelector('.tipo-item').value = ''; novaLinha.querySelector('.campo-servico').value = ''; novaLinha.querySelector('.campo-produto').value = ''; novaLinha.querySelector('.campo-servico').style.display = 'none'; novaLinha.querySelector('.campo-produto').style.display = 'none'; novaLinha.querySelector('.placeholder-item').style.display = 'block'; novaLinha.querySelector('.quantidade-item').value = '1.00'; novaLinha.querySelector('.valor-unitario-item').value = '0,00'; novaLinha.querySelector('.valor-total-item').value = '0,00'; novaLinha.querySelector('input[name*="descricao"]').value = ''; novaLinha.querySelector('.tipo-item').setAttribute('onchange', `alterarTipoItemVenda(this, ${newIndex})`); novaLinha.querySelector('.campo-servico').setAttribute('onchange', `buscarDadosServicoVenda(this, ${newIndex})`); novaLinha.querySelector('.campo-produto').setAttribute('onchange', `buscarDadosProdutoVenda(this, ${newIndex})`); novaLinha.querySelector('.quantidade-item').setAttribute('onchange', `calcularTotalItemVenda(${newIndex})`); novaLinha.querySelector('.valor-unitario-item').setAttribute('onblur', `calcularTotalItemVenda(${newIndex})`); novaLinha.querySelector('.btn-remover-item').setAttribute('onclick', `removerItemVenda(${newIndex})`); novaLinha.querySelector('.btn-remover-item').disabled = false; tbody.appendChild(novaLinha); aplicarMascaras(); } function removerItemVenda(index) { const tbody = document.getElementById('itensVenda'); const rows = tbody.querySelectorAll('tr'); if (rows.length > 1) { rows[index].remove(); tbody.querySelectorAll('tr').forEach((row, idx) => { row.setAttribute('data-index', idx); row.querySelector('td:first-child').textContent = idx + 1; if (idx === 0) { row.querySelector('.btn-remover-item').disabled = true; } }); calcularTotaisVenda(); } }