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)
|
||||
class GuildRenameSettingsAdmin(admin.ModelAdmin):
|
||||
list_display = ('id', 'cost')
|
||||
list_display_links = ('id',) # Hacemos que 'id' sea el enlace
|
||||
list_editable = ('cost',) # Permitimos que 'cost' sea editable
|
||||
fieldsets = (
|
||||
(None, {
|
||||
'fields': ('cost',)
|
||||
}),
|
||||
)
|
||||
|
||||
list_display = ('id', 'cost') # Asegúrate de incluir 'id' antes de 'cost'
|
||||
list_display_links = ('id',) # Permite hacer clic en 'id' para editar
|
||||
list_editable = ('cost',) # Ahora 'cost' es editable en línea
|
||||
|
||||
@admin.register(VoteSite)
|
||||
class VoteSiteAdmin(admin.ModelAdmin):
|
||||
|
||||
+2
-6
@@ -228,14 +228,10 @@ class SecurityToken(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):
|
||||
return f"Costo actual: {self.cost} DP"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Configuración de Renombrar Hermandad"
|
||||
verbose_name_plural = "Configuraciones de Renombrar Hermandad"
|
||||
return f"Configuración de renombrar hermandad - Costo: {self.cost} €"
|
||||
|
||||
|
||||
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,12 +1,13 @@
|
||||
<div class="main-page">
|
||||
<div class="middle-content">
|
||||
<div class="body-content">
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
<div class="title-content"><h1>Renombrar Hermandad</h1></div>
|
||||
<div class="box-content">
|
||||
<div class="title-box-content">
|
||||
<h2>Información</h2>
|
||||
<a class="back-to-account" href="my-account">Regresar a mi cuenta</a>
|
||||
<a class="back-to-account-responsive" href="my-account">Regresar</a>
|
||||
<a class="back-to-account" href="{% url 'my-account' %}">Regresar a mi cuenta</a>
|
||||
<a class="back-to-account-responsive" href="{% url 'my-account' %}">Regresar</a>
|
||||
</div>
|
||||
<div class="body-box-content justified">
|
||||
<script src="{{ URL_PRINCIPAL }}/static/nw-themes/nw-ryu/nw-js-handlers/rename_guild_response.js"></script>
|
||||
@@ -25,18 +26,24 @@
|
||||
</fieldset>
|
||||
<div class="centered">
|
||||
<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>
|
||||
|
||||
<!-- Mostrar mensaje solo si no hay personajes líderes de hermandad -->
|
||||
{% if no_guild_leader_message %}
|
||||
<span class="red-form-response">{{ no_guild_leader_message }}</span>
|
||||
{% 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 %}
|
||||
<table class="middle-center-table">
|
||||
<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>
|
||||
<td><input type="text" maxlength="24" name="new-guild-name" id="new-guild-name" placeholder="Nuevo nombre de hermandad"></td>
|
||||
@@ -45,17 +52,15 @@
|
||||
<td><input type="text" maxlength="24" name="conf-new-guild-name" id="conf-new-guild-name" placeholder="Confirmar nuevo nombre"></td>
|
||||
</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>
|
||||
<td>
|
||||
<input type="password" maxlength="6" name="security-token" id="security-token" placeholder="Token de seguridad">
|
||||
<span class="far fa-eye toggle-token"></span>
|
||||
</td>
|
||||
<td><input type="text" name="security-token" id="security-token" placeholder="Token de seguridad"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<button type="submit" class="rename-guild-button" data-id="RenameGuild">Renombrar Hermandad</button>
|
||||
<button type="submit" class="rename-guild-button" data-id="RenameGuild">Proceder al Pago</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -73,6 +73,8 @@ urlpatterns = [
|
||||
path('quest-character/', views.quest_character_view, name='quest-character'),
|
||||
path('send-gift/', views.send_gift_view, name='send-gift'),
|
||||
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'),
|
||||
|
||||
]
|
||||
|
||||
|
||||
+90
-33
@@ -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']
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
# 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,44 +2366,98 @@ 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>'})
|
||||
|
||||
# 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 not authenticate(username, current_password):
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">La contraseña actual es incorrecta.</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 not security_token or security_token.token != token:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Token de seguridad incorrecto.</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>'})
|
||||
if new_guild_name != conf_new_guild_name:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Los nombres nuevos no coinciden.</span>'})
|
||||
|
||||
# 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])
|
||||
success_url = request.build_absolute_uri(reverse('guild-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('guild-cancel'))
|
||||
|
||||
return JsonResponse({'success': True, 'message': '<span class="ok-form-response">Hermandad renombrada exitosamente.</span>'})
|
||||
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}"
|
||||
)
|
||||
|
||||
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
|
||||
username = request.session.get('username')
|
||||
@@ -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
|
||||
|
||||
@@ -39,32 +39,36 @@ $(function(){
|
||||
var conf = confirm("¿Estás seguro de renombrar la hermandad seleccionada?");
|
||||
|
||||
if (conf === true) {
|
||||
changeButton(button, 'Renombrando hermandad');
|
||||
changeButton(button, 'Procesando pago...');
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '',
|
||||
url: '', // Asegúrate de que la URL es la correcta
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
$("#rename-guild-response").append(data.message).hide().slideDown();
|
||||
|
||||
if (data.success === true) {
|
||||
button.html("Hermandad renombrada");
|
||||
button.css("color","#d79602");
|
||||
setTimeout(function() {
|
||||
$("#nw-rename-guild-form")[0].reset();
|
||||
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);
|
||||
doRefresh();
|
||||
}, 5000);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
setTimeout(function() {
|
||||
$("#rename-guild-response").slideUp( function() {
|
||||
$("#rename-guild-response").empty();
|
||||
|
||||
var stripe = Stripe(data.stripe_public_key); // ✅ Usamos correctamente el public key
|
||||
|
||||
stripe.redirectToCheckout({
|
||||
sessionId: data.session_id // ✅ Ahora usamos data.session_id correctamente
|
||||
}).then(function (result) {
|
||||
if (result.error) {
|
||||
$("#rename-guild-response").append('<span class="red-form-response">' + result.error.message + '</span>').hide().slideDown();
|
||||
restoreButton(button, buttonoriginal);
|
||||
}
|
||||
});
|
||||
}, 5000);
|
||||
|
||||
} else {
|
||||
$("#rename-guild-response").append(data.message).hide().slideDown();
|
||||
restoreButton(button, buttonoriginal);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
@@ -74,6 +78,6 @@ $(function(){
|
||||
}, 2000);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user