Only allow choosing purchases of selected edition
This commit is contained in:
parent
7b2dba7483
commit
a7dd0c5556
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
## Improved
|
## Improved
|
||||||
* game overview: improve how editions and purchases are displayed
|
* game overview: improve how editions and purchases are displayed
|
||||||
|
* add purchase: only allow choosing purchases of selected edition
|
||||||
|
|
||||||
## 1.5.1 / 2023-11-14 21:10+01:00
|
## 1.5.1 / 2023-11-14 21:10+01:00
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.urls import reverse
|
||||||
from games.models import Game, Platform, Purchase, Session, Edition, Device
|
from games.models import Game, Platform, Purchase, Session, Edition, Device
|
||||||
|
|
||||||
custom_date_widget = forms.DateInput(attrs={"type": "date"})
|
custom_date_widget = forms.DateInput(attrs={"type": "date"})
|
||||||
|
@ -50,6 +50,20 @@ class IncludePlatformSelect(forms.Select):
|
||||||
|
|
||||||
|
|
||||||
class PurchaseForm(forms.ModelForm):
|
class PurchaseForm(forms.ModelForm):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Automatically update related_purchase <select/>
|
||||||
|
# to only include purchases of the selected edition.
|
||||||
|
related_purchase_by_edition_url = reverse("related_purchase_by_edition")
|
||||||
|
self.fields["edition"].widget.attrs.update(
|
||||||
|
{
|
||||||
|
"hx-get": related_purchase_by_edition_url,
|
||||||
|
"hx-target": "#id_related_purchase",
|
||||||
|
"hx-swap": "outerHTML",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
edition = EditionChoiceField(
|
edition = EditionChoiceField(
|
||||||
queryset=Edition.objects.order_by("sort_name"),
|
queryset=Edition.objects.order_by("sort_name"),
|
||||||
widget=IncludePlatformSelect(attrs={"autoselect": "autoselect"}),
|
widget=IncludePlatformSelect(attrs={"autoselect": "autoselect"}),
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<link rel="stylesheet" href="{% static 'base.css' %}" />
|
<link rel="stylesheet" href="{% static 'base.css' %}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="dark">
|
<body class="dark" hx-indicator="#indicator">
|
||||||
<img id="indicator" src="{% static 'icons/loading.png' %}" class="absolute right-3 top-3 animate-spin htmx-indicator" />
|
<img id="indicator" src="{% static 'icons/loading.png' %}" class="absolute right-3 top-3 animate-spin htmx-indicator" />
|
||||||
<div class="dark:bg-gray-800 min-h-screen">
|
<div class="dark:bg-gray-800 min-h-screen">
|
||||||
<nav class="mb-4 bg-white dark:bg-gray-900 border-gray-200 rounded">
|
<nav class="mb-4 bg-white dark:bg-gray-900 border-gray-200 rounded">
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
id="last-session-start"
|
id="last-session-start"
|
||||||
href="{% url 'start_session_same_as_last' last.id %}"
|
href="{% url 'start_session_same_as_last' last.id %}"
|
||||||
hx-get="{% url 'start_session_same_as_last' last.id %}"
|
hx-get="{% url 'start_session_same_as_last' last.id %}"
|
||||||
hx-indicator="#indicator"
|
|
||||||
hx-swap="afterbegin"
|
hx-swap="afterbegin"
|
||||||
hx-target=".responsive-table tbody"
|
hx-target=".responsive-table tbody"
|
||||||
hx-select=".responsive-table tbody tr:first-child"
|
hx-select=".responsive-table tbody tr:first-child"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{{ form.related_purchase }}
|
|
@ -44,6 +44,11 @@ urlpatterns = [
|
||||||
views.add_purchase,
|
views.add_purchase,
|
||||||
name="add_purchase_for_edition",
|
name="add_purchase_for_edition",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"related-purchase-by-edition",
|
||||||
|
views.related_purchase_by_edition,
|
||||||
|
name="related_purchase_by_edition",
|
||||||
|
),
|
||||||
path("add-edition/", views.add_edition, name="add_edition"),
|
path("add-edition/", views.add_edition, name="add_edition"),
|
||||||
path(
|
path(
|
||||||
"add-edition-for-game/<int:game_id>",
|
"add-edition-for-game/<int:game_id>",
|
||||||
|
|
|
@ -214,6 +214,15 @@ def edit_edition(request, edition_id=None):
|
||||||
return render(request, "add.html", context)
|
return render(request, "add.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
def related_purchase_by_edition(request):
|
||||||
|
edition_id = request.GET.get("edition")
|
||||||
|
form = PurchaseForm()
|
||||||
|
form.fields["related_purchase"].queryset = Purchase.objects.filter(
|
||||||
|
edition_id=edition_id, type=Purchase.GAME
|
||||||
|
).order_by("edition__sort_name")
|
||||||
|
return render(request, "partials/related_purchase_field.html", {"form": form})
|
||||||
|
|
||||||
|
|
||||||
@use_custom_redirect
|
@use_custom_redirect
|
||||||
def start_game_session(request, game_id: int):
|
def start_game_session(request, game_id: int):
|
||||||
last_session = (
|
last_session = (
|
||||||
|
|
Loading…
Reference in New Issue