Files
NovaWoW/home/admin.py
T
2025-03-02 17:37:33 +01:00

205 lines
7.3 KiB
Python

# home/admin.py
from django.contrib import admin
from django import forms
from .models import (
Noticia, ClienteCategoria, SistemaOperativo, ServerSelection,
RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, GuildRenameSettings, VoteSite, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, MaintenanceMode,
StripeLog, Pedido
)
from django.db import connections
import logging
from django.shortcuts import redirect
from django_ckeditor_5.widgets import CKEditor5Widget
logger = logging.getLogger(__name__)
@admin.register(StripeLog)
class StripeLogAdmin(admin.ModelAdmin):
list_display = (
'account_id', 'username', 'email', 'acore_ip', 'stripe_ip', 'product_name',
'amount', 'session_id', 'mode', 'character_name', 'timestamp'
) # Añadido stripe_ip
list_filter = ('mode', 'timestamp') # Filtros por campo en la parte lateral
search_fields = ('username', 'product_name', 'session_id', 'email', 'stripe_ip') # Ahora incluye 'stripe_ip' en la búsqueda
ordering = ('-timestamp',) # Ordenar por timestamp descendentes
@admin.register(Pedido)
class PedidoLogAdmin(admin.ModelAdmin): # Ahora esta es una clase de admin
list_display = ('transaction_id', 'email_cliente', 'estado', 'monto') # Campos que se mostrarán en el panel
search_fields = ('transaction_id', 'email_cliente') # Habilita búsqueda por ID y email
list_filter = ('estado',) # Filtro por estado de pago
@admin.register(ChangeFactionPrice)
class ChangeFactionPriceAdmin(admin.ModelAdmin):
list_display = ('price',)
@admin.register(MaintenanceMode)
class MaintenanceModeAdmin(admin.ModelAdmin):
list_display = ('is_active',)
@admin.register(GoldPrice)
class GoldPriceAdmin(admin.ModelAdmin):
list_display = ('gold_amount', 'price')
ordering = ('gold_amount',)
@admin.register(TransferPrice)
class TransferPriceAdmin(admin.ModelAdmin):
list_display = ('price',)
@admin.register(LevelUpPrice)
class LevelUpPriceAdmin(admin.ModelAdmin):
list_display = ('price',)
# Formulario para el modelo Noticia
class NoticiaAdminForm(forms.ModelForm):
class Meta:
model = Noticia
fields = ['titulo', 'contenido', 'fecha_fin_evento', 'enlace']
widgets = {
'contenido': CKEditor5Widget(config_name='default'),
}
@admin.register(RenamePrice)
class RenamePriceAdmin(admin.ModelAdmin):
list_display = ("price",)
@admin.register(CustomizePrice)
class CustomizePriceAdmin(admin.ModelAdmin):
list_display = ("price",)
@admin.register(ChangeRacePrice)
class ChangeRacePriceAdmin(admin.ModelAdmin):
list_display = ('price',)
@admin.register(Noticia)
class NoticiaAdmin(admin.ModelAdmin):
form = NoticiaAdminForm
list_display = ['titulo', 'fecha_publicacion']
readonly_fields = ['fecha_publicacion']
fields = ['titulo', 'contenido', 'fecha_fin_evento', 'enlace']
# Formulario para el modelo RecruitAFriend
class RecruitAFriendAdminForm(forms.ModelForm):
content = forms.CharField(widget=CKEditor5Widget(config_name='default'))
class Meta:
model = RecruitAFriend
fields = ['title', 'information', 'content']
@admin.register(RecruitAFriend)
class RecruitAFriendAdmin(admin.ModelAdmin):
form = RecruitAFriendAdminForm
list_display = ['title', 'updated_at']
fields = ['title', 'information', 'content']
# Formulario para el modelo DownloadClientPage
class DownloadClientPageAdminForm(forms.ModelForm):
content = forms.CharField(widget=CKEditor5Widget(config_name='default'))
mac_instructions = forms.CharField(widget=CKEditor5Widget(config_name='default'))
class Meta:
model = DownloadClientPage
fields = ['title', 'content', 'mac_instructions']
@admin.register(DownloadClientPage)
class DownloadClientPageAdmin(admin.ModelAdmin):
form = DownloadClientPageAdminForm
list_display = ['title', 'updated_at']
fields = ['title', 'content', 'mac_instructions']
# Formulario para el modelo ContentCreator
class ContentCreatorAdminForm(forms.ModelForm):
description = forms.CharField(widget=CKEditor5Widget(config_name='default'))
class Meta:
model = ContentCreator
fields = [
'title', 'description', 'content_type', 'subtitle',
'youtube_video_url', 'avatar_image_url',
'youtube_channel_url', 'facebook_page_url'
]
@admin.register(ContentCreator)
class ContentCreatorAdmin(admin.ModelAdmin):
form = ContentCreatorAdminForm
list_display = ['title', 'updated_at']
fields = [
'title', 'description', 'content_type', 'subtitle',
'youtube_video_url', 'avatar_image_url',
'youtube_channel_url', 'facebook_page_url'
]
# Administración para ServerSelection
class ServerSelectionAdmin(admin.ModelAdmin):
list_display = ['name', 'address', 'port', 'gamebuild']
change_list_template = "admin/server_selection.html"
def changelist_view(self, request, extra_context=None):
servers = []
try:
with connections['acore_auth'].cursor() as cursor:
cursor.execute("SELECT id, name, address, port, gamebuild FROM realmlist")
servers = cursor.fetchall()
except Exception as e:
logger.error("Error al obtener servidores: %s", e)
if request.method == "POST" and "server_selection" in request.POST:
selected_server_id = int(request.POST["server_selection"])
selected_server = next((s for s in servers if s[0] == selected_server_id), None)
if selected_server:
ServerSelection.objects.all().delete()
ServerSelection.objects.create(
server_id=selected_server[0],
name=selected_server[1],
address=selected_server[2],
port=selected_server[3],
gamebuild=selected_server[4]
)
return redirect("admin:home_serverselection_changelist")
extra_context = extra_context or {}
extra_context['servers'] = servers
return super().changelist_view(request, extra_context=extra_context)
# Inlines para ClienteCategoria
class SistemaOperativoInline(admin.TabularInline):
model = SistemaOperativo
extra = 1
class ClienteCategoriaAdmin(admin.ModelAdmin):
inlines = [SistemaOperativoInline]
@admin.register(RecruitReward)
class RecruitRewardAdmin(admin.ModelAdmin):
list_display = ('required_friends', 'reward_name', 'item_id', 'item_quantity', 'icon_class')
search_fields = ('reward_name',)
@admin.register(GuildRenameSettings)
class GuildRenameSettingsAdmin(admin.ModelAdmin):
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):
list_display = ('name', 'points', 'url', 'image_url')
search_fields = ('name',)
list_editable = ('points',)
list_display_links = ('name',)
# Registro de modelos en el admin
admin.site.register(ClienteCategoria, ClienteCategoriaAdmin)
admin.site.register(SistemaOperativo)
admin.site.register(ServerSelection, ServerSelectionAdmin)