add_participants: Refactor admin interface for participant management
This commit is contained in:
@@ -20,6 +20,8 @@ from bot.utils import create_bot_instance
|
||||
from .views import view_draw_results
|
||||
import os
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
if not logger.handlers:
|
||||
@@ -36,9 +38,11 @@ def add_participants_view(request):
|
||||
return HttpResponse("Не указан параметр lottery_id", status=400)
|
||||
lottery = get_object_or_404(Lottery, id=lottery_id)
|
||||
|
||||
# Все доступные счета, не участвующие в этой лотерее
|
||||
used_invoice_ids = LotteryParticipant.objects.filter(lottery=lottery).values_list("invoice_id", flat=True)
|
||||
qs = Invoice.objects.filter(used=False).exclude(id__in=used_invoice_ids)
|
||||
|
||||
# Фильтрация
|
||||
deposit_min = request.GET.get("deposit_min")
|
||||
deposit_max = request.GET.get("deposit_max")
|
||||
created_after = request.GET.get("created_after")
|
||||
@@ -48,21 +52,30 @@ def add_participants_view(request):
|
||||
qs = qs.filter(deposit_sum__gte=deposit_min)
|
||||
if deposit_max:
|
||||
qs = qs.filter(deposit_sum__lte=deposit_max)
|
||||
|
||||
if created_after:
|
||||
try:
|
||||
dt = parse_date(created_after)
|
||||
if dt:
|
||||
qs = qs.filter(created_at__gte=dt)
|
||||
qs = qs.filter(created_at__date__gte=dt)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if created_before:
|
||||
try:
|
||||
dt = parse_date(created_before)
|
||||
if dt:
|
||||
qs = qs.filter(created_at__lte=dt)
|
||||
qs = qs.filter(created_at__date__lte=dt)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if request.GET.get("without_bonus"):
|
||||
qs = qs.filter(Q(bonus__isnull=True) | Q(bonus=0))
|
||||
|
||||
if request.GET.get("without_fd"):
|
||||
qs = qs.filter(Q(start_bonus__isnull=True) | Q(start_bonus=0))
|
||||
|
||||
# Обработка формы
|
||||
if request.method == "POST":
|
||||
form = AddParticipantsForm(request.POST)
|
||||
form.fields["invoices"].queryset = qs
|
||||
@@ -78,10 +91,13 @@ def add_participants_view(request):
|
||||
form = AddParticipantsForm()
|
||||
form.fields["invoices"].queryset = qs
|
||||
|
||||
context = {"form": form, "lottery": lottery}
|
||||
context = {
|
||||
"form": form,
|
||||
"lottery": lottery,
|
||||
"invoice_count": qs.count(), # Для отображения числа найденных
|
||||
}
|
||||
return render(request, "admin/add_participants.html", context)
|
||||
|
||||
|
||||
def get_client_by_invoice(invoice):
|
||||
try:
|
||||
return Client.objects.get(club_card_number=invoice.client_club_card_number)
|
||||
|
||||
Reference in New Issue
Block a user