From 74b9d0421c88180d2b3c9c16476d6c09e7fdc699 Mon Sep 17 00:00:00 2001 From: Lukas Kucharczyk Date: Sun, 11 Aug 2024 18:34:50 +0200 Subject: [PATCH] list platforms, fix editing platform --- .pre-commit-config.yaml | 11 ++++-- games/platformviews.py | 76 +++++++++++++++++++++++++++++++++++++ games/templates/navbar.html | 2 +- games/urls.py | 15 +++++++- games/views.py | 14 +++---- 5 files changed, 103 insertions(+), 15 deletions(-) create mode 100644 games/platformviews.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5762804..f251f3e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,11 @@ repos: -- repo: https://github.com/psf/black - rev: 24.8.0 - hooks: - - id: black +# disable due to incomaptible formatting between +# black and ruff +# TODO: replace with ruff when it works on NixOS +# - repo: https://github.com/psf/black +# rev: 24.8.0 +# hooks: +# - id: black - repo: https://github.com/pycqa/isort rev: 5.13.2 hooks: diff --git a/games/platformviews.py b/games/platformviews.py new file mode 100644 index 0000000..d46c74f --- /dev/null +++ b/games/platformviews.py @@ -0,0 +1,76 @@ +from typing import Any + +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, render +from django.template.loader import render_to_string +from django.urls import reverse + +from games.forms import PlatformForm +from games.models import Platform +from games.views import dateformat + + +@login_required +def list_platforms(request: HttpRequest) -> HttpResponse: + context: dict[Any, Any] = {} + page_number = request.GET.get("page", 1) + limit = request.GET.get("limit", 10) + platforms = Platform.objects.order_by("-created_at") + page_obj = None + if int(limit) != 0: + paginator = Paginator(platforms, limit) + page_obj = paginator.get_page(page_number) + platforms = page_obj.object_list + + context = { + "title": "Manage platforms", + "page_obj": page_obj or None, + "elided_page_range": ( + page_obj.paginator.get_elided_page_range( + page_number, on_each_side=1, on_ends=1 + ) + if page_obj + else None + ), + "data": { + "columns": [ + "Name", + "Group", + "Created", + "Actions", + ], + "rows": [ + [ + platform.name, + platform.group, + platform.created_at.strftime(dateformat), + render_to_string( + "components/button_group_sm.html", + { + "buttons": [ + { + "href": reverse( + "edit_platform", args=[platform.pk] + ), + "text": "Edit", + }, + { + "href": reverse( + "delete_platform", args=[platform.pk] + ), + "text": "Delete", + "color": "red", + }, + ] + }, + ), + ] + for platform in platforms + ], + }, + } + return render(request, "list_purchases.html", context) + + diff --git a/games/templates/navbar.html b/games/templates/navbar.html index c4eb33e..8e4a760 100644 --- a/games/templates/navbar.html +++ b/games/templates/navbar.html @@ -107,7 +107,7 @@ class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Editions
  • - Platforms
  • diff --git a/games/urls.py b/games/urls.py index ae2b391..3982e11 100644 --- a/games/urls.py +++ b/games/urls.py @@ -1,6 +1,13 @@ from django.urls import path -from games import deviceviews, gameviews, purchaseviews, sessionviews, views +from games import ( + deviceviews, + gameviews, + platformviews, + purchaseviews, + sessionviews, + views, +) urlpatterns = [ path("", views.index, name="index"), @@ -24,6 +31,12 @@ urlpatterns = [ path("game/list", gameviews.list_games, name="list_games"), path("platform/add", views.add_platform, name="add_platform"), path("platform//edit", views.edit_platform, name="edit_platform"), + path( + "platform//delete", + platformviews.delete_platform, + name="delete_platform", + ), + path("platform/list", platformviews.list_platforms, name="list_platforms"), path("purchase/add", views.add_purchase, name="add_purchase"), path("purchase//edit", views.edit_purchase, name="edit_purchase"), path( diff --git a/games/views.py b/games/views.py index d5ef85e..15be907 100644 --- a/games/views.py +++ b/games/views.py @@ -224,11 +224,11 @@ def view_game(request: HttpRequest, game_id: int) -> HttpResponse: @use_custom_redirect def edit_platform(request: HttpRequest, platform_id: int) -> HttpResponse: context = {} - purchase = get_object_or_404(Purchase, id=platform_id) - form = PlatformForm(request.POST or None, instance=purchase) + platform = get_object_or_404(Platform, id=platform_id) + form = PlatformForm(request.POST or None, instance=platform) if form.is_valid(): form.save() - return redirect("list_sessions") + return redirect("list_platforms") context["title"] = "Edit Platform" context["form"] = form return render(request, "add.html", context) @@ -750,15 +750,11 @@ def stats(request: HttpRequest, year: int = 0) -> HttpResponse: "all_finished_this_year_count": purchases_finished_this_year.count(), "this_year_finished_this_year": purchases_finished_this_year_released_this_year.select_related( "edition" - ).order_by( - "date_finished" - ), + ).order_by("date_finished"), "this_year_finished_this_year_count": purchases_finished_this_year_released_this_year.count(), "purchased_this_year_finished_this_year": purchased_this_year_finished_this_year.select_related( "edition" - ).order_by( - "date_finished" - ), + ).order_by("date_finished"), "total_sessions": this_year_sessions.count(), "unique_days": unique_days["dates"], "unique_days_percent": int(unique_days["dates"] / 365 * 100),