diff --git a/src/pretix/base/models/devices.py b/src/pretix/base/models/devices.py
index 8997da3fe..108f3443b 100644
--- a/src/pretix/base/models/devices.py
+++ b/src/pretix/base/models/devices.py
@@ -20,11 +20,13 @@
# .
#
import string
+from datetime import timedelta
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Max
from django.utils.crypto import get_random_string
+from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from django_scopes import ScopedManager, scopes_disabled
@@ -307,3 +309,8 @@ class DeviceLastSeen(models.Model):
autosummarize=True
)
]
+
+ @property
+ def is_recent(self):
+ # pretixSCAN/pretixPOS sync every 5 minutes, so 7 minutes can be considered "offline"
+ return now() - self.last_seen < timedelta(minutes=7)
diff --git a/src/pretix/control/templates/pretixcontrol/organizers/devices.html b/src/pretix/control/templates/pretixcontrol/organizers/devices.html
index 6597b3cfe..726bf8e0c 100644
--- a/src/pretix/control/templates/pretixcontrol/organizers/devices.html
+++ b/src/pretix/control/templates/pretixcontrol/organizers/devices.html
@@ -118,6 +118,10 @@
{% endif %}
+
{{ d.device_id }}
|
@@ -125,6 +129,7 @@
{% endif %}
{{ d.name }}
{% if d.revoked %}{% endif %}
+
{% if d.gate %}
{{ d.gate.name }}
diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py
index ca6d5f11f..768fbdd22 100644
--- a/src/pretix/control/views/organizer.py
+++ b/src/pretix/control/views/organizer.py
@@ -108,7 +108,9 @@ from pretix.base.services.export import (
init_organizer_exporters, multiexport, scheduled_organizer_export,
)
from pretix.base.services.mail import mail, prefix_subject
-from pretix.base.services.placeholders import prepare_sample_context_for_preview
+from pretix.base.services.placeholders import (
+ prepare_sample_context_for_preview,
+)
from pretix.base.templatetags.rich_text import markdown_compile_email
from pretix.base.views.tasks import AsyncAction
from pretix.control.forms.exports import ScheduledOrganizerExportForm
@@ -1206,7 +1208,7 @@ class DeviceQueryMixin:
def get_queryset(self):
qs = self.request.organizer.devices.prefetch_related(
'limit_events', 'gate',
- ).order_by('revoked', '-device_id')
+ ).select_related('last_seen').order_by('revoked', '-device_id')
if 'device' in self.request_data and '__ALL' not in self.request_data:
qs = qs.filter(
|