Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TTVA-218 | Add a possibility to hide selectable field values from the Respa admin #190

Merged
merged 5 commits into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions locale/fi/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -2205,3 +2205,18 @@ msgstr "SAP:n vaatimia tietoja puuttuu: {}"

msgid "Reservation reminder"
msgstr "Muistutus varauksesta"

msgid "Inactive purposes are not shown in the Respa admin."
msgstr "Jos käyttötarkoitus ei ole aktiivinen, sitä ei näytetä Respan adminissa."

msgid "Inactive terms are not shown in the Respa admin."
msgstr "Jos ehto ei ole aktiivinen, sitä ei näytetä Respan adminissa."

msgid "Inactive resource types are not shown in the Respa admin."
msgstr "Jos resurssityyppi ei ole aktiivinen, sitä ei näytetä Respan adminissa."

msgid "Inactive metadata sets are not shown in the resource form in Respa admin."
msgstr "Jos metatietojoukko ei ole aktiivinen, sitä ei näytetä resurssin lomakkeessa Respan adminissa."

msgid "Inactive equipment is not shown in the Respa admin."
msgstr "Jos varuste ei ole aktiivinen, sitä ei näytetä Respan adminissa."
15 changes: 15 additions & 0 deletions locale/sv/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -1792,3 +1792,18 @@ msgstr ""

msgid "Reservation reminder"
msgstr "Bokningspåminnelse"

msgid "Inactive purposes are not shown in the Respa admin."
msgstr "Inaktiva syften visas inte i Respa administratören."

msgid "Inactive terms are not shown in the Respa admin."
msgstr "Inaktiva villkor visas inte i Respa administratören."

msgid "Inactive resource types are not shown in the Respa admin."
msgstr "Inaktiva resurstyper visas inte i Respa administratören."

msgid "Inactive metadata sets are not shown in the resource form in Respa admin."
msgstr "Inaktiva metadatauppsättningar visas inte i resursformuläret i Respa administratören."

msgid "Inactive equipment is not shown in the Respa admin."
msgstr "Inaktiva utrustningar visas inte i Respa administratören."
18 changes: 18 additions & 0 deletions resources/migrations/0124_purpose_active.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2025-01-07 13:00

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('resources', '0123_reservation_reminder_sent'),
]

operations = [
migrations.AddField(
model_name='purpose',
name='active',
field=models.BooleanField(default=True, help_text='Inactive purposes are not shown in the Respa admin.', verbose_name='Active'),
),
]
18 changes: 18 additions & 0 deletions resources/migrations/0125_termsofuse_active.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2025-01-08 07:41

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('resources', '0124_purpose_active'),
]

operations = [
migrations.AddField(
model_name='termsofuse',
name='active',
field=models.BooleanField(default=True, help_text='Inactive terms are not shown in the Respa admin.', verbose_name='Active'),
),
]
18 changes: 18 additions & 0 deletions resources/migrations/0126_resourcetype_active.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2025-01-08 08:15

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('resources', '0125_termsofuse_active'),
]

operations = [
migrations.AddField(
model_name='resourcetype',
name='active',
field=models.BooleanField(default=True, help_text='Inactive resource types are not shown in the Respa admin.', verbose_name='Active'),
),
]
18 changes: 18 additions & 0 deletions resources/migrations/0127_reservationmetadataset_active.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2025-01-08 08:50

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('resources', '0126_resourcetype_active'),
]

operations = [
migrations.AddField(
model_name='reservationmetadataset',
name='active',
field=models.BooleanField(default=True, help_text='Inactive metadata sets are not shown in the resource form in Respa admin.', verbose_name='Active'),
),
]
18 changes: 18 additions & 0 deletions resources/migrations/0128_equipment_active.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.2.11 on 2025-01-08 11:34

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('resources', '0127_reservationmetadataset_active'),
]

operations = [
migrations.AddField(
model_name='equipment',
name='active',
field=models.BooleanField(default=True, help_text='Inactive equipment is not shown in the Respa admin.', verbose_name='Active'),
),
]
5 changes: 5 additions & 0 deletions resources/models/equipment.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ class Equipment(ModifiableModel, AutoIdentifiedModel):
name = models.CharField(verbose_name=_('Name'), max_length=200)
category = models.ForeignKey(EquipmentCategory, verbose_name=_('Category'), related_name='equipment',
on_delete=models.CASCADE)
active = models.BooleanField(
default=True,
verbose_name=_('Active'),
help_text=_('Inactive equipment is not shown in the Respa admin.')
)

class Meta:
verbose_name = pgettext_lazy('singular', 'equipment')
Expand Down
5 changes: 5 additions & 0 deletions resources/models/reservation.py
Original file line number Diff line number Diff line change
Expand Up @@ -1027,6 +1027,11 @@ class ReservationMetadataSet(ModifiableModel):
related_name="metadata_sets_required",
blank=True,
)
active = models.BooleanField(
default=True,
verbose_name=_("Active"),
help_text=_("Inactive metadata sets are not shown in the resource form in Respa admin."),
)

class Meta:
verbose_name = _("Reservation metadata set")
Expand Down
14 changes: 14 additions & 0 deletions resources/models/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ class ResourceType(ModifiableModel, AutoIdentifiedModel):
verbose_name=_("Main type"), max_length=20, choices=MAIN_TYPES
)
name = models.CharField(verbose_name=_("Name"), max_length=200)
active = models.BooleanField(
default=True,
verbose_name=_("Active"),
help_text=_("Inactive resource types are not shown in the Respa admin.")
)

class Meta:
verbose_name = _("resource type")
Expand All @@ -115,6 +120,10 @@ class Purpose(ModifiableModel, NameIdentifiedModel):
)
name = models.CharField(verbose_name=_("Name"), max_length=200)
public = models.BooleanField(default=True, verbose_name=_("Public"))
active = models.BooleanField(
default=True,
verbose_name=_("Active"),
help_text=_("Inactive purposes are not shown in the Respa admin."))

class Meta:
verbose_name = _("purpose")
Expand Down Expand Up @@ -144,6 +153,11 @@ class TermsOfUse(ModifiableModel, AutoIdentifiedModel):
choices=TERMS_TYPES,
default=TERMS_TYPE_GENERIC,
)
active = models.BooleanField(
default=True,
verbose_name=_("Active"),
help_text=_("Inactive terms are not shown in the Respa admin.")
)

class Meta:
verbose_name = pgettext_lazy("singular", "terms of use")
Expand Down
16 changes: 12 additions & 4 deletions respa_admin/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
Equipment,
Period,
Purpose,
ReservationMetadataSet,
Resource,
ResourceAccess,
ResourceAccessibility,
ResourceImage,
ResourceType,
TermsOfUse,
Unit,
UnitAuthorization,
Expand Down Expand Up @@ -173,14 +175,14 @@ class Meta:
class ResourceForm(forms.ModelForm):
purposes = forms.ModelMultipleChoiceField(
widget=RespaCheckboxSelect,
queryset=Purpose.objects.all(),
queryset=Purpose.objects.filter(active=True),
required=True,
)

equipment = forms.ModelMultipleChoiceField(
required=False,
widget=RespaCheckboxSelect,
queryset=Equipment.objects.all(),
queryset=Equipment.objects.filter(active=True),
)

name_fi = forms.CharField(
Expand Down Expand Up @@ -296,18 +298,24 @@ class Meta:

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["type"].queryset = ResourceType.objects.filter(active=True)
self.fields["generic_terms"].queryset = TermsOfUse.objects.filter(
terms_type=TermsOfUse.TERMS_TYPE_GENERIC
terms_type=TermsOfUse.TERMS_TYPE_GENERIC,
active=True,
)
self.fields["payment_terms"].queryset = TermsOfUse.objects.filter(
terms_type=TermsOfUse.TERMS_TYPE_PAYMENT
terms_type=TermsOfUse.TERMS_TYPE_PAYMENT,
active=True,
)
self.fields["authentication"].choices = [
choice
for choice in self.fields["authentication"].choices
if choice[0] not in ["", "none"]
]
self.fields["authentication"].initial = ["weak"]
self.fields["reservation_metadata_set"].queryset = (
ReservationMetadataSet.objects.filter(active=True)
)

def clean_notification_email_addresses(self):
notification_email_addresses = self.cleaned_data["notification_email_addresses"]
Expand Down
104 changes: 102 additions & 2 deletions respa_admin/tests/test_resource_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
from django.utils import translation
from freezegun import freeze_time

from resources.models import Resource
from resources.models import (
Equipment, EquipmentCategory, Purpose, ReservationMetadataSet, Resource, ResourceType, TermsOfUse
)

from ..forms import get_period_formset
from ..forms import ResourceForm, get_period_formset

NEW_RESOURCE_URL = reverse_lazy("respa_admin:new-resource")

Expand Down Expand Up @@ -236,3 +238,101 @@ def test_editing_resource_via_form_view(admin_client, valid_resource_form_data):
edited_resource = Resource.objects.first()
assert edited_resource.name_fi == "Edited name"
assert resource.name_fi != edited_resource.name


@pytest.mark.django_db
def test_only_active_purposes_are_visible():
active_purpose = Purpose.objects.create(name="Active Purpose", active=True)
inactive_purpose = Purpose.objects.create(name="Inactive Purpose", active=False)

form = ResourceForm()
purposes_field = form.fields['purposes']

assert list(purposes_field.queryset) == [active_purpose]
assert inactive_purpose not in purposes_field.queryset


@pytest.mark.django_db
def test_only_active_terms_of_use_are_visible():
active_generic_terms = TermsOfUse.objects.create(
name="Active Generic Terms",
terms_type=TermsOfUse.TERMS_TYPE_GENERIC,
active=True)
active_payment_terms = TermsOfUse.objects.create(
name="Active Payment Terms",
terms_type=TermsOfUse.TERMS_TYPE_PAYMENT,
active=True)
inactive_generic_terms = TermsOfUse.objects.create(
name="Inactive Generic Terms",
terms_type=TermsOfUse.TERMS_TYPE_GENERIC,
active=False)
inactive_payment_terms = TermsOfUse.objects.create(
name="Inactive Payment Terms",
terms_type=TermsOfUse.TERMS_TYPE_PAYMENT,
active=False)

form = ResourceForm()
generic_terms_field = form.fields['generic_terms']
payment_terms_field = form.fields['payment_terms']

assert list(generic_terms_field.queryset) == [active_generic_terms]
assert inactive_generic_terms not in generic_terms_field.queryset

assert list(payment_terms_field.queryset) == [active_payment_terms]
assert inactive_payment_terms not in payment_terms_field.queryset


@pytest.mark.django_db
def test_only_active_resource_types_are_visible():
active_resource_type = ResourceType.objects.create(
name="Active space",
main_type="space",
active=True)
inactive_resource_type = ResourceType.objects.create(
name="Inactive space",
main_type="space",
active=False)

form = ResourceForm()
resource_type_field = form.fields['type']

assert list(resource_type_field.queryset) == [active_resource_type]
assert inactive_resource_type not in resource_type_field.queryset


@pytest.mark.django_db
def test_only_reservation_metadata_sets_are_visible():
active_metadata_set = ReservationMetadataSet.objects.create(
name="Active metadata set",
active=True)
inactive_metadata_set = ReservationMetadataSet.objects.create(
name="Inactive metadata set",
active=False)

form = ResourceForm()
metadata_set_field = form.fields['reservation_metadata_set']

assert list(metadata_set_field.queryset) == [active_metadata_set]
assert inactive_metadata_set not in metadata_set_field.queryset


@pytest.mark.django_db
def test_only_active_equipments_are_visible():
category = EquipmentCategory.objects.create(
id="category",
name="Category"
)
active_equipment = Equipment.objects.create(
name="Active equipment",
category=category,
active=True)
inactive_equipment = Equipment.objects.create(
name="Inactive equipment",
category=category,
active=False)

form = ResourceForm()
equipment_field = form.fields['equipment']

assert list(equipment_field.queryset) == [active_equipment]
assert inactive_equipment not in equipment_field.queryset
Loading