Implementacion Inicial de la Tienda
This commit is contained in:
+98
-70
@@ -4,6 +4,7 @@ import gmpy2
|
||||
import binascii
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
from django.shortcuts import render, redirect
|
||||
from django.urls import reverse
|
||||
from django.http import HttpResponse, JsonResponse
|
||||
@@ -12,7 +13,7 @@ from django.contrib import messages
|
||||
from django.contrib.auth import logout
|
||||
from django import forms
|
||||
from .pagos_stripe import create_checkout_session
|
||||
from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, StoreCategory, StoreItem, Cart
|
||||
from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, Category, Item
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
import logging
|
||||
from datetime import datetime, timedelta
|
||||
@@ -1164,7 +1165,7 @@ def rename_character_view(request):
|
||||
price_obj = RenamePrice.objects.first()
|
||||
price = price_obj.price if price_obj else 2.00
|
||||
|
||||
# Ejecutar el comando SOAP
|
||||
# Ejecutar el comando SOAP De prueba haber si el servidor funciona antes de proceder al pago
|
||||
command = f".server info"
|
||||
response = execute_soap_command(command)
|
||||
|
||||
@@ -1723,6 +1724,8 @@ def transfer_character_view(request):
|
||||
return render(request, 'account/transfer_character.html', {'characters': characters, 'price': price})
|
||||
|
||||
|
||||
|
||||
|
||||
def transfer_success_view(request):
|
||||
transfer_data = request.session.get('transfer_data')
|
||||
if not transfer_data:
|
||||
@@ -1745,88 +1748,113 @@ def transfer_success_view(request):
|
||||
|
||||
def transfer_cancel_view(request):
|
||||
return render(request, 'account/transfer_cancel.html')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
from decimal import Decimal
|
||||
|
||||
from django.http import JsonResponse
|
||||
|
||||
def store_novawow_success_view(request):
|
||||
return render(request, 'store/store_novawow_success.html')
|
||||
|
||||
def store_novawow_cancel_view(request):
|
||||
return render(request, 'store/store_novawow_cancel.html')
|
||||
|
||||
|
||||
def store_novawow_view(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
category_name = request.GET.get("category")
|
||||
|
||||
categories = StoreCategory.objects.filter(parent_category=None)
|
||||
items = StoreItem.objects.all()
|
||||
cart_items = Cart.objects.filter(username=username)
|
||||
# Obtener personajes del usuario desde la base de datos acore_characters
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
total_price = sum([item.total_price() for item in cart_items])
|
||||
# Obtener categorías e ítems
|
||||
categories = Category.objects.prefetch_related("items").all()
|
||||
store_data = {category.name: list(category.items.values()) for category in categories}
|
||||
|
||||
# Si se está solicitando una categoría específica, devolver solo los ítems de esa categoría
|
||||
if category_name:
|
||||
items_in_category = Category.objects.get(name=category_name).items.values()
|
||||
return JsonResponse({'success': True, 'items': list(items_in_category)})
|
||||
|
||||
return render(request, 'account/store_novawow.html', {
|
||||
# Si el carrito está en la sesión
|
||||
carrito = request.session.get('carrito', [])
|
||||
total_price = sum(item['price'] for item in carrito) * Decimal('1.21') # Incluir IVA
|
||||
|
||||
if request.method == 'POST':
|
||||
# Obtener datos del body
|
||||
data = json.loads(request.body)
|
||||
character_name = data.get('character')
|
||||
|
||||
if not character_name:
|
||||
return JsonResponse({'success': False, 'message': 'Por favor, selecciona un personaje.'})
|
||||
|
||||
# Verificar si el personaje pertenece al usuario
|
||||
if character_name not in characters:
|
||||
return JsonResponse({'success': False, 'message': 'No tienes permiso para renombrar este personaje.'})
|
||||
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('store-novawow/success'))
|
||||
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)
|
||||
|
||||
if stripe_response["success"]:
|
||||
request.session['store_novawow'] = character_name
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'session_id': stripe_response["session_id"],
|
||||
'stripe_public_key': settings.STRIPE_PUBLIC_KEY
|
||||
})
|
||||
else:
|
||||
return JsonResponse({'success': False, 'message': f'Error al iniciar el pago: {stripe_response["error"]}'})
|
||||
|
||||
return render(request, 'store/store_novawow.html', {
|
||||
'characters': characters,
|
||||
'store_data': store_data,
|
||||
'categories': categories,
|
||||
'items': items,
|
||||
'cart_items': cart_items,
|
||||
'total_price': total_price,
|
||||
})
|
||||
|
||||
def add_to_cart(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
if request.method == 'POST':
|
||||
item_id = request.POST.get('item_id')
|
||||
item = StoreItem.objects.get(id=item_id)
|
||||
Cart.objects.create(username=username, item=item)
|
||||
return JsonResponse({'success': True, 'message': f'{item.name} añadido al carrito.'})
|
||||
|
||||
return JsonResponse({'success': False, 'message': 'Error al añadir al carrito.'})
|
||||
|
||||
def remove_from_cart(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
if request.method == 'POST':
|
||||
cart_id = request.POST.get('cart_id')
|
||||
Cart.objects.filter(id=cart_id, username=username).delete()
|
||||
return JsonResponse({'success': True, 'message': 'Artículo eliminado del carrito.'})
|
||||
|
||||
return JsonResponse({'success': False, 'message': 'Error al eliminar del carrito.'})
|
||||
|
||||
def checkout_view(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
cart_items = Cart.objects.filter(username=username)
|
||||
total_price = sum([item.total_price() for item in cart_items])
|
||||
|
||||
success_url = request.build_absolute_uri(reverse('checkout_success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('checkout_cancel'))
|
||||
stripe_response = create_checkout_session(total_price, success_url, cancel_url)
|
||||
|
||||
if stripe_response["success"]:
|
||||
return JsonResponse({'success': True, 'session_id': stripe_response["session_id"]})
|
||||
'total_price': total_price
|
||||
})
|
||||
|
||||
return JsonResponse({'success': False, 'message': 'Error al procesar el pago.'})
|
||||
def store_novawow_success_view(request):
|
||||
# Procesar el comando SOAP tras el pago exitoso
|
||||
character_name = request.session.get('store_novawow')
|
||||
if not character_name:
|
||||
return redirect('store-novawow')
|
||||
|
||||
def checkout_success(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
command = f".send item {character_name}"
|
||||
response = execute_soap_command(command)
|
||||
|
||||
cart_items = Cart.objects.filter(username=username)
|
||||
if response is None or response.strip() == "":
|
||||
message = f"El personaje {character_name} se a anadido los items de la compra."
|
||||
request.session.pop('store_novawow', None) # Limpiar la sesión
|
||||
return render(request, 'store/store_success.html', {'message': message})
|
||||
else:
|
||||
return render(request, 'store/store_success.html', {'message': f"Error: {response}"})
|
||||
|
||||
for cart_item in cart_items:
|
||||
command = f".send item {cart_item.item.item_id} {cart_item.item.name} {username}"
|
||||
execute_soap_command(command)
|
||||
cart_item.delete()
|
||||
|
||||
return render(request, 'account/checkout_success.html', {'message': 'Compra procesada con éxito.'})
|
||||
def store_novawow_buscar_categoria_view(request, categoria):
|
||||
try:
|
||||
# Buscar la categoría desde el parámetro de la URL
|
||||
category = Category.objects.get(name=categoria)
|
||||
items = category.items.all().values("id", "name", "price", "image_url")
|
||||
return JsonResponse({"success": True, "items": list(items)})
|
||||
except Category.DoesNotExist:
|
||||
return JsonResponse({"success": False, "message": "Categoría no encontrada"}, status=404)
|
||||
|
||||
def checkout_cancel(request):
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
return render(request, 'account/checkout_cancel.html', {'message': 'Compra cancelada.'})
|
||||
|
||||
def revive_character_view(request):
|
||||
username = request.session.get('username')
|
||||
|
||||
Reference in New Issue
Block a user