205 lines
7.3 KiB
Python
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)
|