Implementado Cambio de Nombre Hermandad de Stripe
This commit is contained in:
+3
-9
@@ -179,15 +179,9 @@ class RecruitRewardAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(GuildRenameSettings)
|
@admin.register(GuildRenameSettings)
|
||||||
class GuildRenameSettingsAdmin(admin.ModelAdmin):
|
class GuildRenameSettingsAdmin(admin.ModelAdmin):
|
||||||
list_display = ('id', 'cost')
|
list_display = ('id', 'cost') # Asegúrate de incluir 'id' antes de 'cost'
|
||||||
list_display_links = ('id',) # Hacemos que 'id' sea el enlace
|
list_display_links = ('id',) # Permite hacer clic en 'id' para editar
|
||||||
list_editable = ('cost',) # Permitimos que 'cost' sea editable
|
list_editable = ('cost',) # Ahora 'cost' es editable en línea
|
||||||
fieldsets = (
|
|
||||||
(None, {
|
|
||||||
'fields': ('cost',)
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(VoteSite)
|
@admin.register(VoteSite)
|
||||||
class VoteSiteAdmin(admin.ModelAdmin):
|
class VoteSiteAdmin(admin.ModelAdmin):
|
||||||
|
|||||||
+2
-6
@@ -228,14 +228,10 @@ class SecurityToken(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class GuildRenameSettings(models.Model):
|
class GuildRenameSettings(models.Model):
|
||||||
cost = models.IntegerField(default=1000, help_text="Costo en Donation Points (DP) para renombrar una hermandad.")
|
cost = models.DecimalField(max_digits=10, decimal_places=2, default=10, help_text="Costo en euros para renombrar una hermandad.")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Costo actual: {self.cost} DP"
|
return f"Configuración de renombrar hermandad - Costo: {self.cost} €"
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Configuración de Renombrar Hermandad"
|
|
||||||
verbose_name_plural = "Configuraciones de Renombrar Hermandad"
|
|
||||||
|
|
||||||
|
|
||||||
class VoteSite(models.Model):
|
class VoteSite(models.Model):
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
{% include 'partials/head.html' %}
|
||||||
|
{% include 'partials/header.html' %}
|
||||||
|
{% include 'partials/video.html' %}
|
||||||
|
{% include 'partials/guild_rename_cancel.html' %}
|
||||||
|
{% include 'partials/social.html' %}
|
||||||
|
{% include 'partials/footer.html' %}
|
||||||
|
{% include 'partials/final.html' %}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
{% include 'partials/head.html' %}
|
||||||
|
{% include 'partials/header.html' %}
|
||||||
|
{% include 'partials/video.html' %}
|
||||||
|
{% include 'partials/guild_rename_success.html' %}
|
||||||
|
{% include 'partials/social.html' %}
|
||||||
|
{% include 'partials/footer.html' %}
|
||||||
|
{% include 'partials/final.html' %}
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
<div class="main-page">
|
<div class="main-page">
|
||||||
<div class="middle-content">
|
<div class="middle-content">
|
||||||
<div class="body-content">
|
<div class="body-content">
|
||||||
|
<script src="https://js.stripe.com/v3/"></script>
|
||||||
<div class="title-content"><h1>Renombrar Hermandad</h1></div>
|
<div class="title-content"><h1>Renombrar Hermandad</h1></div>
|
||||||
<div class="box-content">
|
<div class="box-content">
|
||||||
<div class="title-box-content">
|
<div class="title-box-content">
|
||||||
<h2>Información</h2>
|
<h2>Información</h2>
|
||||||
<a class="back-to-account" href="my-account">Regresar a mi cuenta</a>
|
<a class="back-to-account" href="{% url 'my-account' %}">Regresar a mi cuenta</a>
|
||||||
<a class="back-to-account-responsive" href="my-account">Regresar</a>
|
<a class="back-to-account-responsive" href="{% url 'my-account' %}">Regresar</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="body-box-content justified">
|
<div class="body-box-content justified">
|
||||||
<script src="{{ URL_PRINCIPAL }}/static/nw-themes/nw-ryu/nw-js-handlers/rename_guild_response.js"></script>
|
<script src="{{ URL_PRINCIPAL }}/static/nw-themes/nw-ryu/nw-js-handlers/rename_guild_response.js"></script>
|
||||||
<br>
|
<br>
|
||||||
<p>La herramienta <span>Renombrar hermandad</span> te permite cambiar de nombre a una hermandad de la cual seas Maestro de Hermandad.</p>
|
<p>La herramienta <span>Renombrar hermandad</span> te permite cambiar de nombre a una hermandad de la cual seas Maestro de Hermandad.</p>
|
||||||
<br>
|
<br>
|
||||||
@@ -25,18 +26,24 @@
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
<div class="centered">
|
<div class="centered">
|
||||||
<br>
|
<br>
|
||||||
<p>Requiere <span>{{ rename_cost }}</span> <span class="yellow-info">PD</span></p>
|
<p>Requiere <span>{{ rename_cost }}</span> <span class="yellow-info">EUR</span></p>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<!-- Mostrar mensaje solo si no hay personajes líderes de hermandad -->
|
|
||||||
{% if no_guild_leader_message %}
|
{% if no_guild_leader_message %}
|
||||||
<span class="red-form-response">{{ no_guild_leader_message }}</span>
|
<span class="red-form-response">{{ no_guild_leader_message }}</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form id="nw-rename-guild-form" method="POST" accept-charset="utf-8">
|
<form id="nw-rename-guild-form" method="POST" action="{% url 'rename-guild' %}" accept-charset="utf-8">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table class="middle-center-table">
|
<table class="middle-center-table">
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="text" maxlength="24" name="old-guild-name" id="old-guild-name" placeholder="Nombre antiguo de hermandad"></td>
|
<td>
|
||||||
|
<select name="old-guild-name" id="old-guild-name">
|
||||||
|
<option value="">Selecciona tu hermandad</option>
|
||||||
|
{% for guild in guild_leader_data %}
|
||||||
|
<option value="{{ guild.1 }}">{{ guild.1 }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="text" maxlength="24" name="new-guild-name" id="new-guild-name" placeholder="Nuevo nombre de hermandad"></td>
|
<td><input type="text" maxlength="24" name="new-guild-name" id="new-guild-name" placeholder="Nuevo nombre de hermandad"></td>
|
||||||
@@ -44,18 +51,16 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><input type="text" maxlength="24" name="conf-new-guild-name" id="conf-new-guild-name" placeholder="Confirmar nuevo nombre"></td>
|
<td><input type="text" maxlength="24" name="conf-new-guild-name" id="conf-new-guild-name" placeholder="Confirmar nuevo nombre"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="password" maxlength="16" name="cur-password" id="cur-password" placeholder="Contraseña actual"></td>
|
<td><input type="password" name="cur-password" id="cur-password" placeholder="Contraseña actual"></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="security-token" id="security-token" placeholder="Token de seguridad"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="password" maxlength="6" name="security-token" id="security-token" placeholder="Token de seguridad">
|
<button type="submit" class="rename-guild-button" data-id="RenameGuild">Proceder al Pago</button>
|
||||||
<span class="far fa-eye toggle-token"></span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button type="submit" class="rename-guild-button" data-id="RenameGuild">Renombrar Hermandad</button>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ urlpatterns = [
|
|||||||
path('quest-character/', views.quest_character_view, name='quest-character'),
|
path('quest-character/', views.quest_character_view, name='quest-character'),
|
||||||
path('send-gift/', views.send_gift_view, name='send-gift'),
|
path('send-gift/', views.send_gift_view, name='send-gift'),
|
||||||
path("webhook/stripe/", stripe_webhook, name="stripe-webhook"),
|
path("webhook/stripe/", stripe_webhook, name="stripe-webhook"),
|
||||||
|
path('guild-success/', views.guild_rename_success_view, name='guild-success'),
|
||||||
|
path('guild-cancel/', views.guild_rename_cancel_view, name='guild-cancel'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
+92
-35
@@ -2338,27 +2338,23 @@ def transfer_d_points_view(request):
|
|||||||
# Renderizar la plantilla para la transferencia de puntos
|
# Renderizar la plantilla para la transferencia de puntos
|
||||||
return render(request, 'account/transfer_d_points.html')
|
return render(request, 'account/transfer_d_points.html')
|
||||||
|
|
||||||
|
|
||||||
def rename_guild_view(request):
|
def rename_guild_view(request):
|
||||||
# Verificar si el usuario está autenticado mediante la sesión
|
|
||||||
username = request.session.get('username')
|
username = request.session.get('username')
|
||||||
if not username:
|
if not username:
|
||||||
return redirect('login')
|
return redirect('login')
|
||||||
|
|
||||||
# Obtener el usuario desde la base de datos `acore_auth`
|
|
||||||
user_data = get_user_from_acore(username)
|
user_data = get_user_from_acore(username)
|
||||||
if not user_data:
|
if not user_data:
|
||||||
return redirect('login')
|
return redirect('login')
|
||||||
|
|
||||||
user_id = user_data['id']
|
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:
|
with connections['acore_characters'].cursor() as cursor:
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT g.guildid, g.name, gm.rank, c.name
|
SELECT g.guildid, g.name, gm.rank, c.name
|
||||||
@@ -2370,43 +2366,97 @@ def rename_guild_view(request):
|
|||||||
guild_leader_data = cursor.fetchall()
|
guild_leader_data = cursor.fetchall()
|
||||||
|
|
||||||
if not guild_leader_data:
|
if not guild_leader_data:
|
||||||
no_guild_leader_message = "No tienes personajes que sean Maestros de Hermandad en tu cuenta."
|
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: No tienes personajes que sean Maestros de Hermandad en tu cuenta.</span>'})
|
||||||
else:
|
|
||||||
no_guild_leader_message = None
|
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':
|
if request.method == 'POST':
|
||||||
old_guild_name = request.POST.get('old-guild-name').strip()
|
old_guild_name = request.POST.get('old-guild-name', '').strip()
|
||||||
new_guild_name = request.POST.get('new-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()
|
conf_new_guild_name = request.POST.get('conf-new-guild-name', '').strip()
|
||||||
current_password = request.POST.get('cur-password').strip()
|
current_password = request.POST.get('cur-password', '').strip()
|
||||||
security_token = request.POST.get('security-token').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 token:
|
||||||
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, completa todos los campos.</span>'})
|
||||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Por favor, complete 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)
|
if new_guild_name != conf_new_guild_name:
|
||||||
with connections['default'].cursor() as cursor:
|
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Los nombres nuevos no coinciden.</span>'})
|
||||||
cursor.execute("SELECT dp FROM home_api_points WHERE accountID = %s", [user_id])
|
|
||||||
points_data = cursor.fetchone()
|
|
||||||
|
|
||||||
if not points_data or points_data[0] < rename_cost:
|
success_url = request.build_absolute_uri(reverse('guild-success'))
|
||||||
return JsonResponse({'success': False, 'message': f'<span class="red-form-response">No tienes suficientes Donation Points (se requieren {rename_cost} DP).</span>'})
|
cancel_url = request.build_absolute_uri(reverse('guild-cancel'))
|
||||||
|
|
||||||
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>'})
|
|
||||||
|
|
||||||
# Deducir los Donation Points del usuario
|
stripe_response = create_checkout_session(
|
||||||
with connections['default'].cursor() as cursor:
|
account_id=user_id,
|
||||||
cursor.execute("UPDATE home_api_points SET dp = dp - %s WHERE accountID = %s", [rename_cost, 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', {
|
return render(request, 'account/rename_guild.html', {
|
||||||
'guild_leader_data': guild_leader_data,
|
'guild_leader_data': guild_leader_data,
|
||||||
'no_guild_leader_message': no_guild_leader_message,
|
|
||||||
'rename_cost': rename_cost
|
'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):
|
def vote_points_view(request):
|
||||||
# Verificar si el usuario tiene un `username` en la sesión
|
# 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')
|
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):
|
def help_view(request):
|
||||||
# Verificar si el usuario está logueado
|
# Verificar si el usuario está logueado
|
||||||
|
|||||||
@@ -39,41 +39,45 @@ $(function(){
|
|||||||
var conf = confirm("¿Estás seguro de renombrar la hermandad seleccionada?");
|
var conf = confirm("¿Estás seguro de renombrar la hermandad seleccionada?");
|
||||||
|
|
||||||
if (conf === true) {
|
if (conf === true) {
|
||||||
changeButton(button, 'Renombrando hermandad');
|
changeButton(button, 'Procesando pago...');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: '',
|
url: '', // Asegúrate de que la URL es la correcta
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
$("#rename-guild-response").append(data.message).hide().slideDown();
|
if (data.success) { // ✅ Verificamos correctamente
|
||||||
|
if (typeof Stripe === 'undefined') {
|
||||||
|
console.error("Stripe.js no está cargado.");
|
||||||
|
$("#rename-guild-response").append('<span class="red-form-response">Error al cargar Stripe. Intente nuevamente más tarde.</span>').hide().slideDown();
|
||||||
|
restoreButton(button, buttonoriginal);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.success === true) {
|
var stripe = Stripe(data.stripe_public_key); // ✅ Usamos correctamente el public key
|
||||||
button.html("Hermandad renombrada");
|
|
||||||
button.css("color","#d79602");
|
stripe.redirectToCheckout({
|
||||||
setTimeout(function() {
|
sessionId: data.session_id // ✅ Ahora usamos data.session_id correctamente
|
||||||
$("#nw-rename-guild-form")[0].reset();
|
}).then(function (result) {
|
||||||
restoreButton(button, buttonoriginal);
|
if (result.error) {
|
||||||
doRefresh();
|
$("#rename-guild-response").append('<span class="red-form-response">' + result.error.message + '</span>').hide().slideDown();
|
||||||
}, 5000);
|
restoreButton(button, buttonoriginal);
|
||||||
}
|
}
|
||||||
else {
|
});
|
||||||
setTimeout(function() {
|
|
||||||
$("#rename-guild-response").slideUp( function() {
|
} else {
|
||||||
$("#rename-guild-response").empty();
|
$("#rename-guild-response").append(data.message).hide().slideDown();
|
||||||
restoreButton(button, buttonoriginal);
|
restoreButton(button, buttonoriginal);
|
||||||
});
|
|
||||||
}, 5000);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function () {
|
||||||
setTimeout(function() {
|
setTimeout(function () {
|
||||||
alert("Algo ha salido mal. Por favor intente más tarde");
|
alert("Algo ha salido mal. Por favor intente más tarde");
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user