template remake
This commit is contained in:
@@ -38,11 +38,9 @@ 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")
|
||||
@@ -52,7 +50,6 @@ 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)
|
||||
@@ -60,7 +57,6 @@ def add_participants_view(request):
|
||||
qs = qs.filter(created_at__date__gte=dt)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if created_before:
|
||||
try:
|
||||
dt = parse_date(created_before)
|
||||
@@ -68,121 +64,39 @@ def add_participants_view(request):
|
||||
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
|
||||
if form.is_valid():
|
||||
selected_invoices = form.cleaned_data["invoices"]
|
||||
for invoice in selected_invoices:
|
||||
selected_ids = request.POST.getlist("invoices")
|
||||
selected_invoices = qs.filter(id__in=selected_ids)
|
||||
added_count = 0
|
||||
for invoice in selected_invoices:
|
||||
if not LotteryParticipant.objects.filter(lottery=lottery, invoice=invoice).exists():
|
||||
invoice.used = True
|
||||
invoice.save()
|
||||
LotteryParticipant.objects.create(lottery=lottery, invoice=invoice)
|
||||
messages.success(request, "Участники успешно добавлены.")
|
||||
return redirect("admin:draw_lotteryparticipant_changelist")
|
||||
else:
|
||||
form = AddParticipantsForm()
|
||||
form.fields["invoices"].queryset = qs
|
||||
added_count += 1
|
||||
messages.success(request, f"Добавлено {added_count} участников.")
|
||||
return redirect("admin:draw_lotteryparticipant_changelist")
|
||||
|
||||
context = {
|
||||
"form": form,
|
||||
"lottery": lottery,
|
||||
"invoice_count": qs.count(), # Для отображения числа найденных
|
||||
"invoices": qs.order_by("-created_at"),
|
||||
"invoice_count": qs.count(),
|
||||
"request": request,
|
||||
}
|
||||
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)
|
||||
except Client.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
# def start_draw(request, lottery_id):
|
||||
# lottery = get_object_or_404(Lottery, id=lottery_id)
|
||||
# logger.info("Запуск розыгрыша для лотереи: %s", lottery.name)
|
||||
|
||||
# if lottery.finished:
|
||||
# messages.warning(request, "Розыгрыш уже завершён.")
|
||||
# return redirect("..")
|
||||
|
||||
# notifier = NotificationService(bot=create_bot_instance())
|
||||
# async_to_sync(notifier.notify_draw_start)(lottery)
|
||||
|
||||
# manually_assigned_invoice_ids = set()
|
||||
# for prize in lottery.prizes.all():
|
||||
# if prize.winner and prize.winner.invoice:
|
||||
# manually_assigned_invoice_ids.add(prize.winner.invoice_id)
|
||||
# prize.winner.used = True
|
||||
# prize.winner.save()
|
||||
|
||||
# for prize in lottery.prizes.all():
|
||||
# logger.info("Обработка приза: %s", prize.prize_place)
|
||||
|
||||
# if prize.winner:
|
||||
# try:
|
||||
# draw_result = lottery.draw_results.get(prize=prize)
|
||||
# draw_result.participant = prize.winner
|
||||
# draw_result.drawn_at = timezone.now()
|
||||
# draw_result.confirmed = False
|
||||
# draw_result.save()
|
||||
# except DrawResult.DoesNotExist:
|
||||
# DrawResult.objects.create(
|
||||
# lottery=lottery,
|
||||
# prize=prize,
|
||||
# participant=prize.winner,
|
||||
# confirmed=False,
|
||||
# drawn_at=timezone.now()
|
||||
# )
|
||||
# continue
|
||||
|
||||
# try:
|
||||
# draw_result = lottery.draw_results.get(prize=prize)
|
||||
# if draw_result.confirmed:
|
||||
# continue
|
||||
# except DrawResult.DoesNotExist:
|
||||
# draw_result = None
|
||||
|
||||
# participants = list(
|
||||
# lottery.participants.filter(used=False).exclude(invoice_id__in=manually_assigned_invoice_ids)
|
||||
# )
|
||||
# if not participants:
|
||||
# continue
|
||||
|
||||
# winner_participant = random.choice(participants)
|
||||
# winner_participant.used = True
|
||||
# winner_participant.save()
|
||||
|
||||
# if draw_result:
|
||||
# draw_result.participant = winner_participant
|
||||
# draw_result.drawn_at = timezone.now()
|
||||
# draw_result.confirmed = False
|
||||
# draw_result.save()
|
||||
# else:
|
||||
# DrawResult.objects.create(
|
||||
# lottery=lottery,
|
||||
# prize=prize,
|
||||
# participant=winner_participant,
|
||||
# confirmed=False,
|
||||
# drawn_at=timezone.now()
|
||||
# )
|
||||
|
||||
# draw_results = lottery.draw_results.all()
|
||||
# async_to_sync(notifier.notify_draw_results)(lottery, draw_results)
|
||||
|
||||
# if not lottery.prizes.filter(winner__isnull=True).exists():
|
||||
# lottery.finished = True
|
||||
# lottery.save()
|
||||
|
||||
# return render(request, "admin/draw_result.html", {"lottery": lottery, "draw_results": draw_results})
|
||||
|
||||
def start_draw(request, lottery_id):
|
||||
lottery = get_object_or_404(Lottery, id=lottery_id)
|
||||
logger.info("Запуск розыгрыша для лотереи: %s", lottery.name)
|
||||
|
||||
Reference in New Issue
Block a user