From 8de2a59db9e38a78c5b5ab85ff7a8587aa5cd6e3 Mon Sep 17 00:00:00 2001 From: Eric <34304046+EricTRL@users.noreply.github.com> Date: Sat, 7 Sep 2024 20:11:43 +0200 Subject: [PATCH] Room access requirements + card updates Remove external_card_cluster (not used anymore) All card numbers require 8 digits now (all 7-length numbers are prepended with a 0) External card digits require 4 numbers (all existing 3-digit numbers are prepended with a 0) Rooms now have an access type (card, key, other) When registering a member, Squire no longer requires a phone number if 1) only rooms with card access are requested and 2) a tue card number is provided Updated Rickrolls to a themed variant --- core/templates/martor/bootstrap/guide.html | 2 +- membership_file/admin.py | 26 ++++++++--- .../fixtures/test_export_members.json | 8 ++-- membership_file/fixtures/test_members.json | 4 +- membership_file/forms.py | 20 +++++++-- membership_file/migrations/0019_room_cards.py | 42 ++++++++++++++++++ .../migrations/0020_card_lengths.py | 32 ++++++++++++++ .../migrations/0021_card_lengths_db.py | 33 ++++++++++++++ membership_file/models.py | 43 ++++++++++++------- .../membership_file/membership_edit.html | 2 +- .../membership_file/membership_view.html | 2 +- membership_file/tests/test_forms.py | 25 +++++++++-- membership_file/tests/test_views.py | 2 +- membership_file/tests/tests_admin.py | 1 - membership_file/tests/tests_model.py | 7 ++- membership_file/tests/tests_user.py | 13 +----- user_interaction/static/themes/april-theme.js | 4 +- user_interaction/views.py | 8 ++++ 18 files changed, 219 insertions(+), 55 deletions(-) create mode 100644 membership_file/migrations/0019_room_cards.py create mode 100644 membership_file/migrations/0020_card_lengths.py create mode 100644 membership_file/migrations/0021_card_lengths_db.py diff --git a/core/templates/martor/bootstrap/guide.html b/core/templates/martor/bootstrap/guide.html index 2196a3ae..39c23bae 100644 --- a/core/templates/martor/bootstrap/guide.html +++ b/core/templates/martor/bootstrap/guide.html @@ -109,7 +109,7 @@

Contact Details

Room Access

{% generic_field form.key_id -1 %} {% generic_field form.tue_card_number -1 %} - {% generic_field form.external_card_number form.external_card_digits form.external_card_cluster 110 70 -1 %} + {% generic_field form.external_card_number form.external_card_digits 110 70 %} {% if form.external_card_number.value %} {% generic_field form.external_card_deposit -1 %} diff --git a/membership_file/templates/membership_file/membership_view.html b/membership_file/templates/membership_file/membership_view.html index 1d75ac76..bae25359 100644 --- a/membership_file/templates/membership_file/membership_view.html +++ b/membership_file/templates/membership_file/membership_view.html @@ -138,7 +138,7 @@

Membership Card

{% if member.last_updated_by is not None %} This information was last changed on {{member.last_updated_date|date:"M j, Y \a\t H\:i"}} by {{member.display_last_updated_name}} {% else %} - This information was never updated since its creation on {{member.last_updated_date|date:"M j, Y \a\t H\:i"}} + This information was last changed on {{member.last_updated_date|date:"M j, Y \a\t H\:i"}} {% endif %}
{% if member.marked_for_deletion %} diff --git a/membership_file/tests/test_forms.py b/membership_file/tests/test_forms.py index 98dc100f..2f44941a 100644 --- a/membership_file/tests/test_forms.py +++ b/membership_file/tests/test_forms.py @@ -110,7 +110,7 @@ def test_fields(self, _): ) # Rooms become available once they exist - kitchen = Room.objects.create(name="Kitchen", access="Crowbar") + kitchen = Room.objects.create(name="Kitchen", access_type=Room.ACCESS_OTHER, access_specification="Crowbar") self.assertHasField("room_access", required=False, initial=None, choices=[(kitchen.id, str(kitchen))]) # Fieldsets should exist @@ -120,9 +120,26 @@ def test_fields(self, _): def test_clean(self, _): """Tests field cleaning""" - # Phone number should be provided if room access is requested + # Phone number should be provided if room access is requested for rooms with keys, + # even if a tue card number is provided self.assertFormHasError( - {"room_access": [Room.objects.create(name="Kitchen", access="Crowbar").pk]}, + { + "room_access": [ + Room.objects.create(name="Kitchen", access_type=Room.ACCESS_OTHER).pk, + Room.objects.create(name="Basement", access_type=Room.ACCESS_CARD).pk, + ], + "tue_card_number": "01234567", + }, + "phone_required", + field_name="phone_number", + ) + + # If all requested rooms requires card access, and a tue card is provided, then no phone number is needed + self.assertFormNotHasError( + { + "room_access": [Room.objects.create(name="Basement", access_type=Room.ACCESS_CARD).pk], + "tue_card_number": "01234567", + }, "phone_required", field_name="phone_number", ) @@ -173,7 +190,7 @@ def test_save(self, _): self.assertFormValid(data) # Room Access - room = Room.objects.create(name="Kitchen", access="Crowbar") + room = Room.objects.create(name="Kitchen", access_type=Room.ACCESS_OTHER, access_specification="Crowbar") data = {**data, "room_access": [room.pk]} form = self.build_form(data) self.assertFormValid(data) diff --git a/membership_file/tests/test_views.py b/membership_file/tests/test_views.py index ce783753..5e5c5dfa 100644 --- a/membership_file/tests/test_views.py +++ b/membership_file/tests/test_views.py @@ -150,7 +150,7 @@ def test_messages(self): def test_admin_log(self): """Tests if an admin log entry is created""" - Room.objects.create(name="Room", access="Master Key") + Room.objects.create(name="Room", access_type=Room.ACCESS_OTHER) data = {**self.data, "do_send_registration_email": True} res = self.assertValidPostResponse(data=data, redirect_url=self.base_url) logs = LogEntry.objects.all() diff --git a/membership_file/tests/tests_admin.py b/membership_file/tests/tests_admin.py index 71d20955..b22cb529 100644 --- a/membership_file/tests/tests_admin.py +++ b/membership_file/tests/tests_admin.py @@ -227,7 +227,6 @@ def setUp(self): "student_number": "", "educational_institution": "TU/e", "external_card_digits": "", - "external_card_cluster": "", "email": self.email, "street": "De Lampendriessen", "house_number": "31", diff --git a/membership_file/tests/tests_model.py b/membership_file/tests/tests_model.py index 44ce1713..fe52b14c 100644 --- a/membership_file/tests/tests_model.py +++ b/membership_file/tests/tests_model.py @@ -138,8 +138,11 @@ def test_is_active_no_active_years(self): class RoomModelTest(TestCase): # Tests the display method of Room def test_room_display(self): - room = Room(id=2, name="Basement", access="Keycard") - self.assertEqual(str(room), "Basement (Keycard)") + room = Room(id=2, name="Basement", access_type=Room.ACCESS_OTHER, access_specification="Keycard") + self.assertEqual(str(room), "Basement (Other - Keycard)") + + room = Room(id=2, name="Basement", access_type=Room.ACCESS_KEY, room_number="1.042") + self.assertEqual(str(room), "1.042 - Basement (Key)") class MemberYearTest(TestCase): diff --git a/membership_file/tests/tests_user.py b/membership_file/tests/tests_user.py index bc7a1468..12be98b5 100644 --- a/membership_file/tests/tests_user.py +++ b/membership_file/tests/tests_user.py @@ -127,26 +127,17 @@ def test_external_card_number(self): # Display None if there is no card number self.member_to_run_tests_on.external_card_number = None self.member_to_run_tests_on.external_card_digits = None - self.member_to_run_tests_on.external_card_cluster = None self.assertIsNone(self.member_to_run_tests_on.display_external_card_number()) # Display 1234567-123 if they exist self.member_to_run_tests_on.external_card_number = "1234567" self.member_to_run_tests_on.external_card_digits = "980" - self.member_to_run_tests_on.external_card_cluster = None self.assertEqual("1234567-980", self.member_to_run_tests_on.display_external_card_number()) - # Display 1234567 (Cluster) if they exist + # Display 1234567 if they exist self.member_to_run_tests_on.external_card_number = "1234567" self.member_to_run_tests_on.external_card_digits = None - self.member_to_run_tests_on.external_card_cluster = "K. Nights" - self.assertEqual("1234567 (K. Nights)", self.member_to_run_tests_on.display_external_card_number()) - - # Display 1234567-980 (Cluster) if they exist - self.member_to_run_tests_on.external_card_number = "1234567" - self.member_to_run_tests_on.external_card_digits = "980" - self.member_to_run_tests_on.external_card_cluster = "K. Nights" - self.assertEqual("1234567-980 (K. Nights)", self.member_to_run_tests_on.display_external_card_number()) + self.assertEqual("1234567", self.member_to_run_tests_on.display_external_card_number()) # Tests the address display method def test_address(self): diff --git a/user_interaction/static/themes/april-theme.js b/user_interaction/static/themes/april-theme.js index 9ea2427c..4cb60364 100644 --- a/user_interaction/static/themes/april-theme.js +++ b/user_interaction/static/themes/april-theme.js @@ -1,11 +1,11 @@ // Modify the DOM $(document).ready(function () { /**************************************************************** - * Generate Navbar Rickroll + * Generate Navbar Knights rap *****************************************************************/ $(".navbar-nav.mr-auto").append(`
  • - Lustrum + Lustrum
  • `) diff --git a/user_interaction/views.py b/user_interaction/views.py index 112cdccf..0c49931a 100644 --- a/user_interaction/views.py +++ b/user_interaction/views.py @@ -78,6 +78,14 @@ class April2023LiveStreamView(MembershipRequiredMixin, TemplateView): "The Knights of the Kitchen Table are the best, largest, and only boardgame and roleplay association in Eindhoven!", "Frambozen bestaan", "This message is sponsored by Fantasy Court", + "Fun fact: The boardgame committee's favourite boardgame is Fortnite Monopoly!", + "Fun fact: The roleplaying committee's favourite system is the Rolepearing Game!", + "Fun fact: The Ivoren Wachter's favourite swordfighting-move is the shield bash!", + "Fun fact: The cooking committee's favourite dish is Soep Ultiem!", + "Fun fact: Fantasy Court's favourite vendor is Conferences!", + "Fun fact: The activity committee's favourite activity is drinking away sorrows in Hubble!", + "Fun fact: The board's favourite board is board 18!", + "The Knights have their own alumni association: The Lords of the Kitchen Table. If you're old, message the board!", ]