init commit

This commit is contained in:
2025-06-13 21:10:20 +09:00
commit d52c611afb
269 changed files with 37162 additions and 0 deletions

89
lottery/webapp/admin.py Normal file
View File

@@ -0,0 +1,89 @@
from django.contrib import admin, messages
from django.urls import path, reverse
from django.shortcuts import redirect
from .models import Client, Invoice, BindingRequest, APISettings
from .services import API_SYNC
from django.utils import timezone
@admin.register(Client)
class ClientAdmin(admin.ModelAdmin):
list_display = ('name', 'club_card_number', 'telegram_id')
change_list_template = "admin/clients_change_list.html"
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('sync-clients/', self.admin_site.admin_view(self.sync_clients), name='sync_clients'),
]
return custom_urls + urls
def sync_clients(self, request):
syncer = API_SYNC()
new_count = syncer.sync_clients()
self.message_user(request, f"Синхронизировано. Добавлено новых клиентов: {new_count}", level=messages.INFO)
return redirect("..")
@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
list_display = ('api_id', 'client_name', 'sum', 'created_at', 'closed_at')
change_list_template = "admin/invoices_change_list.html"
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('sync-invoices/', self.admin_site.admin_view(self.sync_invoices), name='sync_invoices'),
]
return custom_urls + urls
def sync_invoices(self, request):
syncer = API_SYNC()
count = syncer.sync_invoices()
self.message_user(request, f"Синхронизировано. Обновлено/создано записей: {count}", level=messages.INFO)
return redirect("..")
@admin.action(description="Подтвердить выбранные заявки и обновить Telegram ID клиента")
def approve_binding_requests(modeladmin, request, queryset):
count = 0
for binding_request in queryset:
if binding_request.status != 'approved':
binding_request.status = 'approved'
binding_request.processed_at = timezone.now()
binding_request.save()
# Если у заявки связан клиент, обновляем его Telegram ID
if binding_request.client:
client = binding_request.client
client.telegram_id = binding_request.telegram_chat_id
client.save()
count += 1
modeladmin.message_user(request, f"Подтверждено {count} заявок", level=messages.INFO)
@admin.register(BindingRequest)
class BindingRequestAdmin(admin.ModelAdmin):
list_display = ('client_card', 'client', 'telegram_chat_id', 'status', 'created_at')
actions = [approve_binding_requests]
change_list_template = "admin/bindingrequests_change_list.html"
def get_urls(self):
urls = super().get_urls()
custom_urls = [
# Пример кастомного URL для синхронизации заявок через API, если требуется
path('sync-requests/', self.admin_site.admin_view(self.sync_requests), name='sync_requests'),
]
return custom_urls + urls
def sync_requests(self, request):
syncer = API_SYNC()
count = syncer.sync_binding_requests()
self.message_user(request, f"Синхронизировано. Обновлено/создано записей: {count}", level=messages.INFO)
return redirect("..")
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
# Например, можно добавить количество заявок в контекст:
extra_context['total_requests'] = BindingRequest.objects.count()
return super().changelist_view(request, extra_context=extra_context)
@admin.register(APISettings)
class APISettingsAdmin(admin.ModelAdmin):
list_display = ('api_url', 'api_key')