Implementado Cambio de Nombre Hermandad de Stripe
This commit is contained in:
+92
-35
@@ -2338,27 +2338,23 @@ def transfer_d_points_view(request):
|
||||
# Renderizar la plantilla para la transferencia de puntos
|
||||
return render(request, 'account/transfer_d_points.html')
|
||||
|
||||
|
||||
def rename_guild_view(request):
|
||||
# Verificar si el usuario está autenticado mediante la sesión
|
||||
username = request.session.get('username')
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
# Obtener el usuario desde la base de datos `acore_auth`
|
||||
user_data = get_user_from_acore(username)
|
||||
if not user_data:
|
||||
return redirect('login')
|
||||
|
||||
user_id = user_data['id']
|
||||
email = user_data['email']
|
||||
|
||||
security_token = SecurityToken.objects.filter(user_id=user_id).first()
|
||||
guild_settings, created = GuildRenameSettings.objects.get_or_create(defaults={'cost': 10})
|
||||
rename_cost = guild_settings.cost
|
||||
|
||||
# Obtener el costo desde la configuración
|
||||
try:
|
||||
settings = GuildRenameSettings.objects.first()
|
||||
rename_cost = settings.cost if settings else 1000
|
||||
except GuildRenameSettings.DoesNotExist:
|
||||
rename_cost = 1000 # Valor predeterminado si no se encuentra la configuración
|
||||
|
||||
# Comprobar si hay personajes que sean líderes de una hermandad
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT g.guildid, g.name, gm.rank, c.name
|
||||
@@ -2370,43 +2366,97 @@ def rename_guild_view(request):
|
||||
guild_leader_data = cursor.fetchall()
|
||||
|
||||
if not guild_leader_data:
|
||||
no_guild_leader_message = "No tienes personajes que sean Maestros de Hermandad en tu cuenta."
|
||||
else:
|
||||
no_guild_leader_message = None
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: No tienes personajes que sean Maestros de Hermandad en tu cuenta.</span>'})
|
||||
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
if request.method == 'POST':
|
||||
old_guild_name = request.POST.get('old-guild-name').strip()
|
||||
new_guild_name = request.POST.get('new-guild-name').strip()
|
||||
conf_new_guild_name = request.POST.get('conf-new-guild-name').strip()
|
||||
current_password = request.POST.get('cur-password').strip()
|
||||
security_token = request.POST.get('security-token').strip()
|
||||
old_guild_name = request.POST.get('old-guild-name', '').strip()
|
||||
new_guild_name = request.POST.get('new-guild-name', '').strip()
|
||||
conf_new_guild_name = request.POST.get('conf-new-guild-name', '').strip()
|
||||
current_password = request.POST.get('cur-password', '').strip()
|
||||
token = request.POST.get('security-token', '').strip()
|
||||
|
||||
# Validar campos vacíos
|
||||
if not old_guild_name or not new_guild_name or not conf_new_guild_name or not current_password or not security_token:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Por favor, complete todos los campos.</span>'})
|
||||
if not old_guild_name or not new_guild_name or not conf_new_guild_name or not current_password or not token:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Por favor, completa todos los campos.</span>'})
|
||||
|
||||
if not authenticate(username, current_password):
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">La contraseña actual es incorrecta.</span>'})
|
||||
|
||||
if not security_token or security_token.token != token:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Token de seguridad incorrecto.</span>'})
|
||||
|
||||
# Verificar si el usuario tiene suficientes Donation Points (DP)
|
||||
with connections['default'].cursor() as cursor:
|
||||
cursor.execute("SELECT dp FROM home_api_points WHERE accountID = %s", [user_id])
|
||||
points_data = cursor.fetchone()
|
||||
if new_guild_name != conf_new_guild_name:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Los nombres nuevos no coinciden.</span>'})
|
||||
|
||||
if not points_data or points_data[0] < rename_cost:
|
||||
return JsonResponse({'success': False, 'message': f'<span class="red-form-response">No tienes suficientes Donation Points (se requieren {rename_cost} DP).</span>'})
|
||||
|
||||
if response is None:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error de comunicación con el servidor. Intente nuevamente más tarde.</span>'})
|
||||
success_url = request.build_absolute_uri(reverse('guild-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('guild-cancel'))
|
||||
|
||||
# Deducir los Donation Points del usuario
|
||||
with connections['default'].cursor() as cursor:
|
||||
cursor.execute("UPDATE home_api_points SET dp = dp - %s WHERE accountID = %s", [rename_cost, user_id])
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=user_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=rename_cost,
|
||||
character_name=old_guild_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Renombrar hermandad: {old_guild_name} → {new_guild_name}"
|
||||
)
|
||||
|
||||
return JsonResponse({'success': True, 'message': '<span class="ok-form-response">Hermandad renombrada exitosamente.</span>'})
|
||||
if stripe_response["success"]:
|
||||
request.session['guild_rename'] = {
|
||||
'old_name': old_guild_name,
|
||||
'new_name': new_guild_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, 'account/rename_guild.html', {
|
||||
'guild_leader_data': guild_leader_data,
|
||||
'no_guild_leader_message': no_guild_leader_message,
|
||||
'rename_cost': rename_cost
|
||||
})
|
||||
|
||||
|
||||
def guild_rename_success_view(request):
|
||||
# Obtener los datos de la sesión
|
||||
guild_rename_data = request.session.get('guild_rename')
|
||||
if not guild_rename_data:
|
||||
return redirect('rename-cancel') # Redirigir si no hay datos de renombrado
|
||||
|
||||
old_guild_name = guild_rename_data.get('old_name')
|
||||
new_guild_name = guild_rename_data.get('new_name')
|
||||
|
||||
if not old_guild_name or not new_guild_name:
|
||||
return redirect('rename-cancel') # Redirigir si faltan datos
|
||||
|
||||
# Ejecutar el comando SOAP
|
||||
command = f".guild rename {old_guild_name} {new_guild_name}"
|
||||
response = execute_soap_command(command)
|
||||
|
||||
# Limpiar la sesión después de la ejecución
|
||||
request.session.pop('guild_rename', None)
|
||||
|
||||
if response is None or response.strip() == "":
|
||||
message = f"La Hermandad '{old_guild_name}' ha cambiado su nombre a '{new_guild_name}'. Cierra sesión y vuelve a entrar para que los cambios se reflejen en el juego."
|
||||
return render(request, 'account/guild_rename_success.html', {'message': message})
|
||||
else:
|
||||
return render(request, 'account/guild_rename_success.html', {'message': f"Error: {response}"})
|
||||
|
||||
def vote_points_view(request):
|
||||
# Verificar si el usuario tiene un `username` en la sesión
|
||||
@@ -2595,6 +2645,13 @@ def trade_points_view(request):
|
||||
"""
|
||||
return render(request, 'account/trade_points.html')
|
||||
|
||||
def guild_rename_cancel_view(request):
|
||||
"""
|
||||
Vista para la página de intercambio de puntos.
|
||||
"""
|
||||
return render(request, 'account/guild_rename_cancel.html')
|
||||
|
||||
|
||||
|
||||
def help_view(request):
|
||||
# Verificar si el usuario está logueado
|
||||
|
||||
Reference in New Issue
Block a user