Skip to content

Commit

Permalink
Add new Pindora data to section and series admin panel views
Browse files Browse the repository at this point in the history
  • Loading branch information
matti-lamppu committed Feb 14, 2025
1 parent dd81edb commit e1d75b5
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 0 deletions.
11 changes: 11 additions & 0 deletions backend/tilavarauspalvelu/admin/application_section/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,20 @@ class ApplicationSectionAdmin(admin.ModelAdmin):
],
},
],
[
_("Pindora information"),
{
"fields": [
"should_have_active_access_code",
"pindora_response",
],
},
],
]
readonly_fields = [
"id",
"ext_uuid",
"should_have_active_access_code",
]
inlines = [
SuitableTimeRangeInline,
Expand All @@ -131,6 +141,7 @@ def get_queryset(self, request: WSGIRequest) -> QuerySet:
.annotate(
status=L("status"),
application_status=L("application__status"),
should_have_active_access_code=L("should_have_active_access_code"),
)
.select_related(
"application",
Expand Down
23 changes: 23 additions & 0 deletions backend/tilavarauspalvelu/admin/application_section/form.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from __future__ import annotations

import json
from typing import Any

from django import forms
from django.utils.translation import gettext_lazy as _

from tilavarauspalvelu.enums import ApplicationSectionStatusChoice
from tilavarauspalvelu.integrations.keyless_entry import PindoraClient
from tilavarauspalvelu.models import (
Application,
ApplicationSection,
Expand Down Expand Up @@ -93,6 +95,8 @@ class Meta:


class ApplicationSectionAdminForm(forms.ModelForm):
instance: ApplicationSection | None

status = forms.CharField(
widget=disabled_widget,
required=False,
Expand All @@ -113,12 +117,29 @@ class ApplicationSectionAdminForm(forms.ModelForm):
},
)

pindora_response = forms.CharField(
widget=forms.Textarea(attrs={"disabled": True, "cols": "40", "rows": "1"}),
required=False,
label=_("Pindora API response"),
help_text=_("Response from Pindora API"),
)

def __init__(self, *args: Any, **kwargs: Any) -> None:
instance: ApplicationSection | None = kwargs.get("instance")
if instance:
kwargs.setdefault("initial", {})
kwargs["initial"]["status"] = ApplicationSectionStatusChoice(instance.status).label

self.base_fields["application"].queryset = Application.objects.select_related("user")

if getattr(self.instance, "pk", None) and self.instance.should_have_active_access_code:
pindora_field = self.fields["pindora_response"]
pindora_field.widget.attrs.update({"cols": "100", "rows": "20"})

response = PindoraClient.get_seasonal_booking(section=self.instance)

pindora_field.initial = json.dumps(response, default=str, indent=2)

super().__init__(*args, **kwargs)

class Meta:
Expand All @@ -137,6 +158,7 @@ class Meta:
"application": _("Application"),
"age_group": _("Age group"),
"purpose": _("Purpose"),
"should_have_active_access_code": _("Should have active access code"),
}
help_texts = {
"ext_uuid": _("ID for external systems to use"),
Expand All @@ -150,4 +172,5 @@ class Meta:
"application": _("Application this section is in."),
"age_group": _("Age group for this section."),
"purpose": _("Purpose for this section."),
"should_have_active_access_code": _("Should this application section have an active access code?"),
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ class RecurringReservationAdmin(admin.ModelAdmin):
{
"fields": [
"should_have_active_access_code",
"access_type",
"used_access_types",
"pindora_response",
],
},
Expand All @@ -83,6 +85,8 @@ class RecurringReservationAdmin(admin.ModelAdmin):
"ext_uuid",
"created",
"should_have_active_access_code",
"access_type",
"used_access_types",
]
inlines = [ReservationInline]

Expand All @@ -98,5 +102,7 @@ def get_queryset(self, request: WSGIRequest) -> models.QuerySet:
)
.annotate(
should_have_active_access_code=L("should_have_active_access_code"),
access_type=L("access_type"),
used_access_types=L("used_access_types"),
)
)
7 changes: 7 additions & 0 deletions backend/tilavarauspalvelu/admin/recurring_reservation/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ class Meta:
"allocated_time_slot": _("Allocated time slot"),
"age_group": _("Age group"),
"should_have_active_access_code": _("Should have active access code"),
"access_type": _("Access type"),
"used_access_types": _("Used access types"),
}
help_texts = {
"ext_uuid": _("ID for external systems to use"),
Expand All @@ -61,6 +63,11 @@ class Meta:
"allocated_time_slot": _("Allocated time slot this recurring reservation is for"),
"age_group": _("Age group for this recurring reservation"),
"should_have_active_access_code": _("Should this recurring reservation have an active access code?"),
"access_type": _(
"Access type for the reservations in this recurring reservation (if unambiguous), "
"otherwise access type will be 'multi-valued'"
),
"used_access_types": _("All unique access types used in the reservations of this recurring reservation"),
}
widgets = {
"description": forms.Textarea(attrs={"rows": 4}),
Expand Down
6 changes: 6 additions & 0 deletions backend/tilavarauspalvelu/admin/reservation/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,9 @@ class ReservationAdmin(admin.ModelAdmin):
_("Pindora information"),
{
"fields": [
"access_type",
"access_code_is_active",
"access_code_generated_at",
"pindora_response",
],
},
Expand Down Expand Up @@ -212,6 +215,9 @@ class ReservationAdmin(admin.ModelAdmin):
"created_at",
"price_net",
"non_subsidised_price_net",
"access_code_is_active",
"access_code_generated_at",
"access_type",
]
inlines = [PaymentOrderInline]

Expand Down
10 changes: 10 additions & 0 deletions backend/tilavarauspalvelu/admin/reservation/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
class ReservationAdminForm(forms.ModelForm):
instance: Reservation

access_type = forms.ChoiceField(choices=AccessType.model_choices, required=False)

pindora_response = forms.CharField(
widget=forms.Textarea(attrs={"disabled": True, "cols": "40", "rows": "1"}),
required=False,
Expand Down Expand Up @@ -46,6 +48,10 @@ class Meta:
"confirmed_at": _("Confirmed at"),
"created_at": _("Created at"),
#
"access_type": _("Access type"),
"access_code_generated_at": _("Access code generated at"),
"access_code_is_active": _("Access code is active"),
#
"price": _("Price"),
"price_net": _("Price net"),
"non_subsidised_price": _("Non-subsidised price"),
Expand Down Expand Up @@ -105,6 +111,10 @@ class Meta:
"confirmed_at": _("When this reservation was confirmed"),
"created_at": _("When this reservation was created"),
#
"access_type": _("Access type"),
"access_code_generated_at": _("Access code generated at"),
"access_code_is_active": _("Access code is active"),
#
"price": _("The price of this particular reservation including VAT"),
"price_net": _("The price of this particular reservation excluding VAT"),
"non_subsidised_price": _("The non subsidised price of this reservation including VAT"),
Expand Down
2 changes: 2 additions & 0 deletions backend/tilavarauspalvelu/admin/reservation_unit/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
class ReservationUnitAdminForm(forms.ModelForm):
instance: ReservationUnit

access_type = forms.ChoiceField(choices=AccessType.model_choices, required=False)

pindora_response = forms.CharField(
widget=forms.Textarea(attrs={"disabled": True, "cols": "40", "rows": "1"}),
required=False,
Expand Down

0 comments on commit e1d75b5

Please sign in to comment.