From 5138f8c24019d6ce9f6792bd2c49b8a61b772e0e Mon Sep 17 00:00:00 2001 From: Pauliina Ilmanen Date: Wed, 8 Jan 2025 09:28:18 +0200 Subject: [PATCH 1/5] Hide inactive purposes from respa admin resource form Add a new field `active` to the `Purpose` model. Admin users can change this field in Django admin. Hide inactive purposes from the resource form in the Respa admin. Refs TTVA-218 --- locale/fi/LC_MESSAGES/django.po | 3 +++ locale/sv/LC_MESSAGES/django.po | 3 +++ resources/migrations/0124_purpose_active.py | 18 ++++++++++++++++++ resources/models/resource.py | 4 ++++ respa_admin/forms.py | 2 +- respa_admin/tests/test_resource_forms.py | 16 ++++++++++++++-- 6 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 resources/migrations/0124_purpose_active.py diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 5f325f77d..c03039508 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -2205,3 +2205,6 @@ 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." diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index 9ffd906f5..b2ebe75e8 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -1792,3 +1792,6 @@ 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." diff --git a/resources/migrations/0124_purpose_active.py b/resources/migrations/0124_purpose_active.py new file mode 100644 index 000000000..93de82ace --- /dev/null +++ b/resources/migrations/0124_purpose_active.py @@ -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'), + ), + ] diff --git a/resources/models/resource.py b/resources/models/resource.py index 7d15a83e2..c16f63282 100644 --- a/resources/models/resource.py +++ b/resources/models/resource.py @@ -115,6 +115,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") diff --git a/respa_admin/forms.py b/respa_admin/forms.py index 06ef9fc21..f2321bf50 100644 --- a/respa_admin/forms.py +++ b/respa_admin/forms.py @@ -173,7 +173,7 @@ class Meta: class ResourceForm(forms.ModelForm): purposes = forms.ModelMultipleChoiceField( widget=RespaCheckboxSelect, - queryset=Purpose.objects.all(), + queryset=Purpose.objects.filter(active=True), required=True, ) diff --git a/respa_admin/tests/test_resource_forms.py b/respa_admin/tests/test_resource_forms.py index 253963ff6..4bad7fe81 100644 --- a/respa_admin/tests/test_resource_forms.py +++ b/respa_admin/tests/test_resource_forms.py @@ -6,9 +6,9 @@ from django.utils import translation from freezegun import freeze_time -from resources.models import Resource +from resources.models import Purpose, Resource -from ..forms import get_period_formset +from ..forms import ResourceForm, get_period_formset NEW_RESOURCE_URL = reverse_lazy("respa_admin:new-resource") @@ -236,3 +236,15 @@ 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 From 674af76e07f46bb5742dc03b14340d5c863fdb5c Mon Sep 17 00:00:00 2001 From: Pauliina Ilmanen Date: Wed, 8 Jan 2025 10:07:18 +0200 Subject: [PATCH 2/5] Hide inactive terms of use from respa admin resource form Add a new field `active` to the `TermsOfUse` model. Admin users can change this field in Django admin. Hide inactive terms of use from the resource form in the Respa admin. Refs TTVA-218 --- locale/fi/LC_MESSAGES/django.po | 3 ++ locale/sv/LC_MESSAGES/django.po | 3 ++ .../migrations/0125_termsofuse_active.py | 18 +++++++++++ resources/models/resource.py | 5 +++ respa_admin/forms.py | 6 ++-- respa_admin/tests/test_resource_forms.py | 32 ++++++++++++++++++- 6 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 resources/migrations/0125_termsofuse_active.py diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index c03039508..ae84dd07e 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -2208,3 +2208,6 @@ 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." diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index b2ebe75e8..f3c765b1a 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -1795,3 +1795,6 @@ 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." diff --git a/resources/migrations/0125_termsofuse_active.py b/resources/migrations/0125_termsofuse_active.py new file mode 100644 index 000000000..40546f1f1 --- /dev/null +++ b/resources/migrations/0125_termsofuse_active.py @@ -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'), + ), + ] diff --git a/resources/models/resource.py b/resources/models/resource.py index c16f63282..15d59f5ad 100644 --- a/resources/models/resource.py +++ b/resources/models/resource.py @@ -148,6 +148,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") diff --git a/respa_admin/forms.py b/respa_admin/forms.py index f2321bf50..00f7fd74a 100644 --- a/respa_admin/forms.py +++ b/respa_admin/forms.py @@ -297,10 +297,12 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) 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 diff --git a/respa_admin/tests/test_resource_forms.py b/respa_admin/tests/test_resource_forms.py index 4bad7fe81..26a901966 100644 --- a/respa_admin/tests/test_resource_forms.py +++ b/respa_admin/tests/test_resource_forms.py @@ -6,7 +6,7 @@ from django.utils import translation from freezegun import freeze_time -from resources.models import Purpose, Resource +from resources.models import Purpose, Resource, TermsOfUse from ..forms import ResourceForm, get_period_formset @@ -248,3 +248,33 @@ def test_only_active_purposes_are_visible(): 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 From ff55bf46b49a42367c6b0671b08f2e5dac62da48 Mon Sep 17 00:00:00 2001 From: Pauliina Ilmanen Date: Wed, 8 Jan 2025 10:35:14 +0200 Subject: [PATCH 3/5] Hide inactive resource types from respa admin resource form Add a new field `active` to the `ResourceType` model. Admin users can change this field in Django admin. Hide inactive resource types from the resource form in the Respa admin. Refs TTVA-218 --- locale/fi/LC_MESSAGES/django.po | 3 +++ locale/sv/LC_MESSAGES/django.po | 3 +++ .../migrations/0126_resourcetype_active.py | 18 +++++++++++++++++ resources/models/resource.py | 5 +++++ respa_admin/forms.py | 2 ++ respa_admin/tests/test_resource_forms.py | 20 ++++++++++++++++++- 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 resources/migrations/0126_resourcetype_active.py diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index ae84dd07e..4c9681f06 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -2211,3 +2211,6 @@ msgstr "Jos käyttötarkoitus ei ole aktiivinen, sitä ei näytetä Respan admin 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." diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index f3c765b1a..fc3ae1cea 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -1798,3 +1798,6 @@ 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." diff --git a/resources/migrations/0126_resourcetype_active.py b/resources/migrations/0126_resourcetype_active.py new file mode 100644 index 000000000..72dfb67e1 --- /dev/null +++ b/resources/migrations/0126_resourcetype_active.py @@ -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'), + ), + ] diff --git a/resources/models/resource.py b/resources/models/resource.py index 15d59f5ad..f81c50480 100644 --- a/resources/models/resource.py +++ b/resources/models/resource.py @@ -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") diff --git a/respa_admin/forms.py b/respa_admin/forms.py index 00f7fd74a..712ca5835 100644 --- a/respa_admin/forms.py +++ b/respa_admin/forms.py @@ -14,6 +14,7 @@ ResourceAccess, ResourceAccessibility, ResourceImage, + ResourceType, TermsOfUse, Unit, UnitAuthorization, @@ -296,6 +297,7 @@ 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, active=True, diff --git a/respa_admin/tests/test_resource_forms.py b/respa_admin/tests/test_resource_forms.py index 26a901966..52152fe23 100644 --- a/respa_admin/tests/test_resource_forms.py +++ b/respa_admin/tests/test_resource_forms.py @@ -6,7 +6,7 @@ from django.utils import translation from freezegun import freeze_time -from resources.models import Purpose, Resource, TermsOfUse +from resources.models import Purpose, Resource, ResourceType, TermsOfUse from ..forms import ResourceForm, get_period_formset @@ -278,3 +278,21 @@ def test_only_active_terms_of_use_are_visible(): 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 From 4999a5f3b78b3802c1d69530152880b31c2f86ea Mon Sep 17 00:00:00 2001 From: Pauliina Ilmanen Date: Wed, 8 Jan 2025 11:30:52 +0200 Subject: [PATCH 4/5] Hide inactive reservation metadata sets from respa admin resource form Add a new field `active` to the `ReservationMetadataSet` model. Admin users can change this field in Django admin. Hide inactive reservation metadata sets from the resource form in the Respa admin. Refs TTVA-218 --- locale/fi/LC_MESSAGES/django.po | 3 +++ locale/sv/LC_MESSAGES/django.po | 3 +++ .../0127_reservationmetadataset_active.py | 18 ++++++++++++++++++ resources/models/reservation.py | 5 +++++ respa_admin/forms.py | 4 ++++ respa_admin/tests/test_resource_forms.py | 18 +++++++++++++++++- 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 resources/migrations/0127_reservationmetadataset_active.py diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 4c9681f06..cbcb6a7ea 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -2214,3 +2214,6 @@ 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." diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index fc3ae1cea..ace2dc6d1 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -1801,3 +1801,6 @@ 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." diff --git a/resources/migrations/0127_reservationmetadataset_active.py b/resources/migrations/0127_reservationmetadataset_active.py new file mode 100644 index 000000000..218ab2517 --- /dev/null +++ b/resources/migrations/0127_reservationmetadataset_active.py @@ -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'), + ), + ] diff --git a/resources/models/reservation.py b/resources/models/reservation.py index 468ab8572..3b4e42a54 100644 --- a/resources/models/reservation.py +++ b/resources/models/reservation.py @@ -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") diff --git a/respa_admin/forms.py b/respa_admin/forms.py index 712ca5835..594f10cd8 100644 --- a/respa_admin/forms.py +++ b/respa_admin/forms.py @@ -10,6 +10,7 @@ Equipment, Period, Purpose, + ReservationMetadataSet, Resource, ResourceAccess, ResourceAccessibility, @@ -312,6 +313,9 @@ def __init__(self, *args, **kwargs): 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"] diff --git a/respa_admin/tests/test_resource_forms.py b/respa_admin/tests/test_resource_forms.py index 52152fe23..c2623d39c 100644 --- a/respa_admin/tests/test_resource_forms.py +++ b/respa_admin/tests/test_resource_forms.py @@ -6,7 +6,7 @@ from django.utils import translation from freezegun import freeze_time -from resources.models import Purpose, Resource, ResourceType, TermsOfUse +from resources.models import Purpose, ReservationMetadataSet, Resource, ResourceType, TermsOfUse from ..forms import ResourceForm, get_period_formset @@ -296,3 +296,19 @@ def test_only_active_resource_types_are_visible(): 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 From c1487033f37ce30afe60cb1c02e748195a981a9e Mon Sep 17 00:00:00 2001 From: Pauliina Ilmanen Date: Wed, 8 Jan 2025 13:57:03 +0200 Subject: [PATCH 5/5] Hide inactive equipments from respa admin resource form Add a new field `active` to the `Equipment` model. Admin users can change this field in Django admin. Hide inactive equipments from the resource form in the Respa admin. Refs TTVA-218 --- locale/fi/LC_MESSAGES/django.po | 3 +++ locale/sv/LC_MESSAGES/django.po | 3 +++ resources/migrations/0128_equipment_active.py | 18 +++++++++++++ resources/models/equipment.py | 5 ++++ respa_admin/forms.py | 2 +- respa_admin/tests/test_resource_forms.py | 26 ++++++++++++++++++- 6 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 resources/migrations/0128_equipment_active.py diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index cbcb6a7ea..4351c02db 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -2217,3 +2217,6 @@ msgstr "Jos resurssityyppi ei ole aktiivinen, sitä ei näytetä Respan adminiss 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." diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index ace2dc6d1..19ef60a43 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -1804,3 +1804,6 @@ 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." diff --git a/resources/migrations/0128_equipment_active.py b/resources/migrations/0128_equipment_active.py new file mode 100644 index 000000000..c2af0bec9 --- /dev/null +++ b/resources/migrations/0128_equipment_active.py @@ -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'), + ), + ] diff --git a/resources/models/equipment.py b/resources/models/equipment.py index 659622560..87f04fbfc 100644 --- a/resources/models/equipment.py +++ b/resources/models/equipment.py @@ -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') diff --git a/respa_admin/forms.py b/respa_admin/forms.py index 594f10cd8..572e41185 100644 --- a/respa_admin/forms.py +++ b/respa_admin/forms.py @@ -182,7 +182,7 @@ class ResourceForm(forms.ModelForm): equipment = forms.ModelMultipleChoiceField( required=False, widget=RespaCheckboxSelect, - queryset=Equipment.objects.all(), + queryset=Equipment.objects.filter(active=True), ) name_fi = forms.CharField( diff --git a/respa_admin/tests/test_resource_forms.py b/respa_admin/tests/test_resource_forms.py index c2623d39c..574b14468 100644 --- a/respa_admin/tests/test_resource_forms.py +++ b/respa_admin/tests/test_resource_forms.py @@ -6,7 +6,9 @@ from django.utils import translation from freezegun import freeze_time -from resources.models import Purpose, ReservationMetadataSet, Resource, ResourceType, TermsOfUse +from resources.models import ( + Equipment, EquipmentCategory, Purpose, ReservationMetadataSet, Resource, ResourceType, TermsOfUse +) from ..forms import ResourceForm, get_period_formset @@ -312,3 +314,25 @@ def test_only_reservation_metadata_sets_are_visible(): 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