From 148517cc5f609ea9cc185b02f412763f2ef67fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 26 Dec 2024 22:43:19 +0100 Subject: [PATCH] rangingbeaconbssidsquest --- src/c3nav/mapdata/quests/positioning.py | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/c3nav/mapdata/quests/positioning.py b/src/c3nav/mapdata/quests/positioning.py index bb3ab872..0ece4d9e 100644 --- a/src/c3nav/mapdata/quests/positioning.py +++ b/src/c3nav/mapdata/quests/positioning.py @@ -52,3 +52,45 @@ class RangingBeaconAltitudeQuest(Quest): def _qs_for_request(cls, request): return RangingBeacon.qs_for_request(request).select_related('space', 'space__level').filter(altitude_quest=True) + + +class RangingBeaconBSSIDsQuestForm(ChangeSetModelForm): + def clean_bssids(self): + data = self.cleaned_data["bssids"] + if not data: + raise ValidationError(_("Need at least one bssid.")) + return data + + class Meta: + model = RangingBeacon + fields = ("bssids", ) + + @property + def changeset_title(self): + return f'Ranging Beacon BSSID Quest: {self.instance.title}' + + +@register_quest +@dataclass +class RangingBeaconBSSIDsQuest(Quest): + quest_type = "ranging_beacon_bssids" + quest_type_label = _('Ranging Beacon Identifier') + quest_type_icon = "wifi_find" + form_class = RangingBeaconBSSIDsQuestForm + obj: RangingBeacon + + @property + def quest_description(self) -> list[str]: + return [ + _("This quest is only available in the app. It works fully automatically."), + _("Please stand near this access point and wait for the submit button to appear."), + _("This should happen within less than a minute."), + ] + + @property + def point(self) -> Point: + return mapping(self.obj.geometry) + + @classmethod + def _qs_for_request(cls, request): + return RangingBeacon.qs_for_request(request).filter(import_tag__startswith="noc:", bssids=[])