Move from HTML templates to pure Python
Remove cruft
This commit is contained in:
+117
-44
@@ -1,57 +1,130 @@
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.paginator import Paginator
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.safestring import SafeText
|
||||
|
||||
from common.components import (
|
||||
A,
|
||||
AddForm,
|
||||
Button,
|
||||
Component,
|
||||
CsrfInput,
|
||||
Div,
|
||||
paginated_table_content,
|
||||
)
|
||||
from common.layout import render_page
|
||||
from common.time import dateformat, local_strftime
|
||||
from games.forms import GameStatusChangeForm
|
||||
from games.models import GameStatusChange
|
||||
|
||||
|
||||
class EditStatusChangeView(LoginRequiredMixin, UpdateView):
|
||||
model = GameStatusChange
|
||||
form_class = GameStatusChangeForm
|
||||
template_name = "add.html"
|
||||
context_object_name = "form"
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
return get_object_or_404(GameStatusChange, id=self.kwargs["statuschange_id"])
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy("games:list_platforms")
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["title"] = "Edit Platform"
|
||||
return context
|
||||
@login_required
|
||||
def add_statuschange(request: HttpRequest) -> HttpResponse:
|
||||
form = GameStatusChangeForm(request.POST or None)
|
||||
if form.is_valid():
|
||||
obj = form.save()
|
||||
return redirect("games:view_game", game_id=obj.game.id)
|
||||
return render_page(
|
||||
request, AddForm(form, request=request), title="Add status change"
|
||||
)
|
||||
|
||||
|
||||
class AddStatusChangeView(LoginRequiredMixin, CreateView):
|
||||
model = GameStatusChange
|
||||
form_class = GameStatusChangeForm
|
||||
template_name = "add.html"
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy("games:view_game", kwargs={"pk": self.object.game.id})
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["title"] = "Add status change"
|
||||
return context
|
||||
@login_required
|
||||
def edit_statuschange(request: HttpRequest, statuschange_id: int) -> HttpResponse:
|
||||
statuschange = get_object_or_404(GameStatusChange, id=statuschange_id)
|
||||
form = GameStatusChangeForm(request.POST or None, instance=statuschange)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect("games:list_platforms")
|
||||
return render_page(
|
||||
request, AddForm(form, request=request), title="Edit status change"
|
||||
)
|
||||
|
||||
|
||||
class GameStatusChangeListView(LoginRequiredMixin, ListView):
|
||||
model = GameStatusChange
|
||||
template_name = "list_purchases.html"
|
||||
context_object_name = "status_changes"
|
||||
paginate_by = 10
|
||||
@login_required
|
||||
def list_statuschanges(request: HttpRequest) -> HttpResponse:
|
||||
page_number = request.GET.get("page", 1)
|
||||
limit = request.GET.get("limit", 10)
|
||||
statuschanges = GameStatusChange.objects.select_related("game").all()
|
||||
page_obj = None
|
||||
if int(limit) != 0:
|
||||
paginator = Paginator(statuschanges, limit)
|
||||
page_obj = paginator.get_page(page_number)
|
||||
statuschanges = page_obj.object_list
|
||||
elided_page_range = (
|
||||
page_obj.paginator.get_elided_page_range(page_number, on_each_side=1, on_ends=1)
|
||||
if page_obj
|
||||
else None
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return GameStatusChange.objects.select_related("game").all()
|
||||
data = {
|
||||
"header_action": None,
|
||||
"columns": ["Game", "Old Status", "New Status", "Timestamp"],
|
||||
"rows": [
|
||||
[
|
||||
sc.game.name,
|
||||
sc.get_old_status_display() if sc.old_status else "-",
|
||||
sc.get_new_status_display(),
|
||||
local_strftime(sc.timestamp, dateformat) if sc.timestamp else "-",
|
||||
]
|
||||
for sc in statuschanges
|
||||
],
|
||||
}
|
||||
content = paginated_table_content(
|
||||
data,
|
||||
page_obj=page_obj,
|
||||
elided_page_range=elided_page_range,
|
||||
request=request,
|
||||
)
|
||||
return render_page(request, content, title="Status changes")
|
||||
|
||||
|
||||
class GameStatusChangeDeleteView(LoginRequiredMixin, DeleteView):
|
||||
model = GameStatusChange
|
||||
template_name = "gamestatuschange_confirm_delete.html"
|
||||
def _delete_statuschange_content(statuschange, request: HttpRequest) -> SafeText:
|
||||
inner = Div(
|
||||
[],
|
||||
[
|
||||
Component(
|
||||
tag_name="p",
|
||||
children=["Are you sure you want to delete this status change?"],
|
||||
),
|
||||
Button(
|
||||
[("class", "w-full")], "Delete", color="red", type="submit", size="lg"
|
||||
),
|
||||
A(
|
||||
[("class", "")],
|
||||
Button([("class", "w-full")], "Cancel", color="gray"),
|
||||
href=reverse("games:view_game", args=[statuschange.game.id]),
|
||||
),
|
||||
],
|
||||
)
|
||||
form = Component(
|
||||
tag_name="form",
|
||||
attributes=[("method", "post"), ("class", "dark:text-white")],
|
||||
children=[CsrfInput(request), inner],
|
||||
)
|
||||
return Div(
|
||||
[
|
||||
(
|
||||
"class",
|
||||
"2xl:max-w-(--breakpoint-2xl) xl:max-w-(--breakpoint-xl) "
|
||||
"md:max-w-(--breakpoint-md) sm:max-w-(--breakpoint-sm) self-center",
|
||||
)
|
||||
],
|
||||
[form],
|
||||
)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy("games:view_game", kwargs={"game_id": self.object.game.id})
|
||||
|
||||
@login_required
|
||||
def delete_statuschange(request: HttpRequest, pk: int) -> HttpResponse:
|
||||
statuschange = get_object_or_404(GameStatusChange, id=pk)
|
||||
if request.method == "POST":
|
||||
game_id = statuschange.game.id
|
||||
statuschange.delete()
|
||||
return redirect("games:view_game", game_id=game_id)
|
||||
return render_page(
|
||||
request,
|
||||
_delete_statuschange_content(statuschange, request),
|
||||
title="Delete status change",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user