-----------------------------------------------------------------------------------------------------------------------------------------------------
grillas_catalogo.php
';
// Agregar los encabezados de la grilla
echo '
Código
';
echo '
Artículo
';
echo '';
echo '';
$contador = 0; // Contador de filas llenas
$color_clase = 'fila-color1'; // Alternancia de colores para las filas
foreach ($data as $item) {
$contador++;
// Alternar el color de la fila
$color_clase = ($color_clase == 'fila-color1') ? 'fila-color2' : 'fila-color1';
echo '
' . htmlspecialchars($item['codart']) . '
';
echo '
' . htmlspecialchars($item['descripcion']) . '
';
echo '';
echo '';
}
for ($j = $contador; $j < $filas_vacias; $j++) {
echo '';
echo '';
echo '';
echo '';
}
echo '';
}
?>
-----------------------------------------------------------------------------------------------------------------------------------------------------
boton_elegir.php
Elegir";
}
?>
-----------------------------------------------------------------------------------------------------------------------------------------------------
articulos.js
$(document).ready(function() {
// Función para agregar o actualizar artículos en la tabla
$('.elegir-btn').on('click', function() {
// Obtener los datos del artículo
var codigo = $(this).data('codigo');
var descripcion = $(this).data('descripcion');
var precio = parseFloat($(this).data('precio').replace('$', ''));
// Buscar todas las filas que coinciden con el código
var filasExistentes = $('#formulario tbody tr').filter(function() {
return $(this).find('td').eq(0).text() === codigo;
});
// Verificar si hay alguna fila existente
if (filasExistentes.length === 0) {
var cantidad = 1; // Cantidad inicial es 1
var subtotal = cantidad * precio;
// Crear la nueva fila y agregarla a la tabla
var nuevaFila = '
' +
'
' + codigo + '
' +
'
' + descripcion + '
' +
'
$' + precio.toFixed(2) + '
' +
'
' +
'
' + cantidad + '
' +
'
' +
'
$' + subtotal.toFixed(2) + '
' +
'
' +
'
';
$('#formulario tbody').append(nuevaFila);
}
else {
// Si ya existe, sumar la cantidad a la primera fila encontrada
var filaExistente = filasExistentes.first();
var cantidadExistente = parseInt(filaExistente.find('td').eq(4).text()); // Aseguramos que accedemos al índice correcto
var cantidadNueva = cantidadExistente + 1; // Aumentamos en 1 la cantidad
// Calcular el nuevo subtotal
var precioExistente = parseFloat(filaExistente.find('td').eq(2).text().replace('$', ''));
var subtotalNuevo = cantidadNueva * precioExistente;
// Actualizar la fila con la nueva cantidad y subtotal
filaExistente.find('td').eq(4).text(cantidadNueva); // Actualizamos la cantidad
filaExistente.find('td').eq(6).text('$' + subtotalNuevo.toFixed(2)); // Actualizamos el subtotal
}
// Actualizar el total
actualizarTotal();
});
// Detectar doble clic en la celda de cantidad
$('#formulario').on('dblclick', 'td.cantidad', function() {
var celdaCantidad = $(this);
var cantidadActual = parseInt(celdaCantidad.text());
// Reemplazar la celda con un campo de entrada
var inputCantidad = $('');
celdaCantidad.html(inputCantidad);
inputCantidad.focus();
// Guardar el nuevo valor al presionar Enter o hacer clic fuera del campo de entrada
inputCantidad.on('blur keyup', function(event) {
if (event.type === 'blur' || event.key === 'Enter') {
var cantidadNueva = parseInt($(this).val());
if (!isNaN(cantidadNueva) && cantidadNueva > 0) {
celdaCantidad.text(cantidadNueva);
// Actualizar el subtotal
var fila = celdaCantidad.closest('tr');
var precio = parseFloat(fila.find('td').eq(2).text().replace('$', ''));
var subtotalNuevo = cantidadNueva * precio;
fila.find('td').eq(6).text('$' + subtotalNuevo.toFixed(2));
// Actualizar el total
actualizarTotal();
} else {
celdaCantidad.text(cantidadActual); // Revertir al valor original si la entrada no es válida
}
}
});
});
// Event listeners para los botones "-" y "+"
$('#formulario').on('click', '.btn-restar', function() {
var fila = $(this).closest('tr');
var cantidad = parseInt(fila.find('td.cantidad').text());
var precio = parseFloat(fila.find('td').eq(2).text().replace('$', ''));
if (cantidad > 1) {
cantidad -= 1;
fila.find('td.cantidad').text(cantidad);
var nuevoSubtotal = cantidad * precio;
fila.find('td').eq(6).text('$' + nuevoSubtotal.toFixed(2));
}
actualizarTotal();
});
$('#formulario').on('click', '.btn-sumar', function() {
var fila = $(this).closest('tr');
var cantidad = parseInt(fila.find('td.cantidad').text());
var precio = parseFloat(fila.find('td').eq(2).text().replace('$', ''));
cantidad += 1;
fila.find('td.cantidad').text(cantidad);
var nuevoSubtotal = cantidad * precio;
fila.find('td').eq(6).text('$' + nuevoSubtotal.toFixed(2));
actualizarTotal();
});
// Función para eliminar fila
$('#formulario').on('click', '.btn-eliminar', function() {
$(this).closest('tr').remove();
actualizarTotal();
});
// Actualizar el total
function actualizarTotal() {
var total = 0;
$('#formulario tbody tr').each(function() {
var subtotal = parseFloat($(this).find('td').eq(6).text().replace('$', ''));
total += subtotal;
});
$('#total').text('$' + total.toFixed(2));
}
});