Arreglado un problema visual del precio 6.1000000000000005 tipo a si

This commit is contained in:
adevopg
2025-02-16 01:01:45 +01:00
parent 0d5a8f853a
commit 2a194d6e98
2 changed files with 39 additions and 31 deletions
@@ -86,19 +86,23 @@
return; return;
} }
carrito.push({ id, nombre, precio }); carrito.push({ id, nombre, precio: parseFloat(precio) }); // Convertir precio a float
actualizarCarrito(); actualizarCarrito();
} }
function actualizarCarrito() { function actualizarCarrito() {
carritoLista.innerHTML = ""; carritoLista.innerHTML = "";
let total = 0; let total = 0;
carrito.forEach((item, index) => { carrito.forEach((item, index) => {
total += item.precio; total += item.precio;
const itemCarrito = `<li class="real-info-box">${item.nombre} - ${item.precio} monedas <button class="real-info-box red-info" onclick="eliminarDelCarrito(${index})">Eliminar</button></li>`; const itemCarrito = `<li class="real-info-box">${item.nombre} - ${item.precio.toFixed(2)} monedas
<button class="real-info-box red-info" onclick="eliminarDelCarrito(${index})">Eliminar</button>
</li>`;
carritoLista.innerHTML += itemCarrito; carritoLista.innerHTML += itemCarrito;
}); });
totalElement.textContent = total;
totalElement.textContent = total.toFixed(2);
totalIVAElement.textContent = (total * 1.21).toFixed(2); totalIVAElement.textContent = (total * 1.21).toFixed(2);
} }
@@ -112,25 +116,25 @@
}); });
document.getElementById("comprar").addEventListener("click", () => { document.getElementById("comprar").addEventListener("click", () => {
const personajeSeleccionado = document.getElementById("personaje").value; const personajeSeleccionado = document.getElementById("personaje").value;
if (!personajeSeleccionado) { if (!personajeSeleccionado) {
alert("¡Por favor, selecciona un personaje antes de continuar!"); alert("¡Por favor, selecciona un personaje antes de continuar!");
return; return;
} }
if (carrito.length === 0) {
alert("El carrito está vacío");
return;
}
if (carrito.length === 0) {
alert("El carrito está vacío");
} else {
// Crear la sesión de pago con Stripe // Crear la sesión de pago con Stripe
fetch('/es/store-novawow/', { fetch('/es/store-novawow/', {
method: 'POST', method: 'POST',
headers: { headers: { 'Content-Type': 'application/json' },
'Content-Type': 'application/json',
},
body: JSON.stringify({ body: JSON.stringify({
character: personajeSeleccionado, // Añadir el personaje seleccionado character: personajeSeleccionado,
carrito: carrito, // Si necesitas enviar los ítems del carrito, también puedes incluirlos aquí carrito: carrito,
}), }),
}) })
.then(response => response.json()) .then(response => response.json())
@@ -143,7 +147,7 @@
} }
}) })
.catch(error => console.error("Error al crear la sesión de pago:", error)); .catch(error => console.error("Error al crear la sesión de pago:", error));
} });
});
cargarItems("Bolsas"); cargarItems("Bolsas");
</script> </script>
+11 -7
View File
@@ -17,7 +17,7 @@ from .library_correo import enviar_correo
from django.utils.crypto import get_random_string from django.utils.crypto import get_random_string
from django.conf import settings from django.conf import settings
from django.utils.timezone import now from django.utils.timezone import now
from decimal import Decimal from decimal import Decimal, ROUND_HALF_UP
# Configuración del logger # Configuración del logger
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -1780,7 +1780,10 @@ def store_novawow_view(request):
# Obtener carrito desde la sesión # Obtener carrito desde la sesión
carrito = request.session.get('carrito', []) carrito = request.session.get('carrito', [])
total_price = sum(Decimal(item['precio']) for item in carrito) * Decimal('1.21')
# ✅ Calcular el precio total con 2 decimales
total_price = sum(Decimal(item['precio']) for item in carrito)
total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
if request.method == 'POST': if request.method == 'POST':
# Obtener datos del body # Obtener datos del body
@@ -1791,12 +1794,13 @@ def store_novawow_view(request):
if not character_name: if not character_name:
return JsonResponse({'success': False, 'message': 'Por favor, selecciona un personaje.'}) return JsonResponse({'success': False, 'message': 'Por favor, selecciona un personaje.'})
# ✅ ACTUALIZAR EL CARRITO ANTES DE CALCULAR EL PRECIO # ✅ ACTUALIZAR EL CARRITO Y FORZAR LA SESIÓN
request.session['carrito'] = carrito request.session['carrito'] = carrito
request.session.modified = True # Forzar que Django guarde la sesión inmediatamente request.session.modified = True # Forzar que Django guarde la sesión inmediatamente
# ✅ CALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO # ✅ RECALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO
total_price = sum(Decimal(item['precio']) for item in carrito) * Decimal('1.21') total_price = sum(Decimal(item['precio']) for item in carrito)
total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
# Verificar si el personaje pertenece al usuario # Verificar si el personaje pertenece al usuario
if character_name not in characters: if character_name not in characters:
@@ -1805,7 +1809,7 @@ def store_novawow_view(request):
# Crear sesión de pago con Stripe # Crear sesión de pago con Stripe
success_url = request.build_absolute_uri(reverse('store-novawow/success')) success_url = request.build_absolute_uri(reverse('store-novawow/success'))
cancel_url = request.build_absolute_uri(reverse('store-novawow/cancel')) cancel_url = request.build_absolute_uri(reverse('store-novawow/cancel'))
stripe_response = create_checkout_session(total_price, success_url=success_url, cancel_url=cancel_url) stripe_response = create_checkout_session(total_price_with_iva, success_url=success_url, cancel_url=cancel_url)
if stripe_response["success"]: if stripe_response["success"]:
request.session['store_novawow'] = character_name request.session['store_novawow'] = character_name
@@ -1821,7 +1825,7 @@ def store_novawow_view(request):
'characters': characters, 'characters': characters,
'store_data': store_data, 'store_data': store_data,
'categories': categories, 'categories': categories,
'total_price': total_price 'total_price': total_price_with_iva
}) })
def store_novawow_success_view(request): def store_novawow_success_view(request):