diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml
index 4731fdc5..24806e07 100644
--- a/.github/workflows/black.yml
+++ b/.github/workflows/black.yml
@@ -15,4 +15,4 @@ jobs:
- name: Black Code Formatter
uses: lgeiger/black-action@v1.0.1
with:
- args: --check --target-version py311 --line-length 120 --skip-string-normalization --exclude '(migrations|urls\.py)' stregsystem stregreport kiosk
+ args: --check --target-version py311 --line-length 120 --skip-string-normalization --exclude '(migrations|urls\.py)' stregsystem stregreport kiosk razzia
diff --git a/razzia/__init__.py b/razzia/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/razzia/admin.py b/razzia/admin.py
new file mode 100644
index 00000000..c67f99a2
--- /dev/null
+++ b/razzia/admin.py
@@ -0,0 +1,5 @@
+from django.contrib import admin
+
+from razzia.models import Razzia
+
+admin.site.register(Razzia)
diff --git a/razzia/apps.py b/razzia/apps.py
new file mode 100644
index 00000000..7fd118e3
--- /dev/null
+++ b/razzia/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class RazziaConfig(AppConfig):
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "razzia"
diff --git a/razzia/migrations/0001_initial.py b/razzia/migrations/0001_initial.py
new file mode 100644
index 00000000..b78cd4d2
--- /dev/null
+++ b/razzia/migrations/0001_initial.py
@@ -0,0 +1,78 @@
+# Generated by Django 4.1.13 on 2024-09-14 13:35
+
+import datetime
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ (
+ "stregsystem",
+ "0018_member_signup_due_paid_alter_mobilepayment_status_and_more",
+ ),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="Razzia",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("name", models.CharField(max_length=20)),
+ ("turns_per_member", models.IntegerField(default=0)),
+ ("turn_interval", models.DurationField(default=datetime.timedelta(0))),
+ ("start_date", models.DateTimeField(auto_now_add=True)),
+ ],
+ options={
+ "permissions": (
+ ("host_razzia", "Can host a foobar, fnugfald or bread razzia"),
+ ),
+ },
+ ),
+ migrations.CreateModel(
+ name="RazziaEntry",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("time", models.DateTimeField(auto_now_add=True, null=True)),
+ (
+ "member",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to="stregsystem.member",
+ ),
+ ),
+ (
+ "razzia",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE, to="razzia.razzia"
+ ),
+ ),
+ ],
+ ),
+ migrations.AddField(
+ model_name="razzia",
+ name="members",
+ field=models.ManyToManyField(
+ through="razzia.RazziaEntry", to="stregsystem.member"
+ ),
+ ),
+ ]
diff --git a/razzia/migrations/__init__.py b/razzia/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/razzia/models.py b/razzia/models.py
new file mode 100644
index 00000000..83edf387
--- /dev/null
+++ b/razzia/models.py
@@ -0,0 +1,25 @@
+from django.db import models
+
+from stregsystem.models import Member
+from datetime import timedelta
+
+
+class Razzia(models.Model):
+ class Meta:
+ permissions = (("host_razzia", "Can host a foobar, fnugfald or bread razzia"),)
+
+ name = models.CharField(max_length=20)
+ turns_per_member = models.IntegerField(default=0)
+ turn_interval = models.DurationField(default=timedelta(0))
+ # required_products = models.ManyToManyField(Product)
+ # purchase_start_date = models.DateTimeField(null=True, blank=True)
+ # purchase_end_date = models.DateTimeField(null=True, blank=True)
+
+ members = models.ManyToManyField(Member, through='RazziaEntry')
+ start_date = models.DateTimeField(auto_now_add=True)
+
+
+class RazziaEntry(models.Model):
+ member = models.ForeignKey(Member, on_delete=models.CASCADE)
+ razzia = models.ForeignKey(Razzia, on_delete=models.CASCADE)
+ time = models.DateTimeField(null=True, blank=True, auto_now_add=True)
diff --git a/razzia/templates/members.html b/razzia/templates/members.html
new file mode 100644
index 00000000..49be2cb6
--- /dev/null
+++ b/razzia/templates/members.html
@@ -0,0 +1,14 @@
+{% extends "admin/stregsystem/razzia/razzia.html" %}
+
+{% block title %}{{title|default:"Razzia"}}{% endblock %}
+{% block breadcrumbs %}
{% endblock %}
+
+{% block razzia_content %}
+ Back to razzia
+ Registered members at razzia {{ razzia.start_date | date:"D d M Y" }} - {{ razzia.members.all | length }} fember(s)
+ {% for entry in razzia.razziaentry_set.all %}
+
+ {{ entry.member.firstname }} {{ entry.member.lastname }} ({{ entry.member.username }}) at {{entry.time}}
+
+ {% endfor %}
+{% endblock %}
diff --git a/razzia/templates/menu.html b/razzia/templates/menu.html
new file mode 100644
index 00000000..d18ee249
--- /dev/null
+++ b/razzia/templates/menu.html
@@ -0,0 +1,27 @@
+{% extends "razzia_base.html" %}
+
+{% block title %}{{title|default:"Razzia"}}{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block razzia_content %}
+
+
+
+
{{new_text|default:"New razzia"}}
+
+
+
+ {% if razzias %}
+ Previous razzias
+ {% endif %}
+ {% for razzia in razzias %}
+
+
+
+
{{ razzia.start_date | date:"D d M Y" }} - {{razzia.members.all | length}} fember(s)
+
+
+
+ {% endfor %}
+{% endblock %}
diff --git a/razzia/templates/razzia.html b/razzia/templates/razzia.html
new file mode 100644
index 00000000..4bcf6c6a
--- /dev/null
+++ b/razzia/templates/razzia.html
@@ -0,0 +1,35 @@
+{% extends "razzia_search.html" %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block member_present %}
+
+
+ {% if drunkard %}
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% if drunkard %}
+ {{member.firstname}} {{member.lastname}} ({{member.username}})
wait {{ remaining_time_mins }}m {{ remaining_time_secs }}s before next free beer
+ {% else %}
+ {{member.firstname}} {{member.lastname}} ({{member.username}}) {% if already_checked_in %} last checked in at {{last_entry.time}} {% endif %}
+ {% endif %}
+
+{% endblock %}
+
+{% block drunkard_present %}
+ fa-exclamation-triangle
+ {% if drunkard %} checked in within the previous hour, wait {{ remaining_time }}{% endif %}
+{% endblock %}
+
diff --git a/razzia/templates/razzia_base.html b/razzia/templates/razzia_base.html
new file mode 100644
index 00000000..78ab72ec
--- /dev/null
+++ b/razzia/templates/razzia_base.html
@@ -0,0 +1,16 @@
+{% extends "admin/base_site.html" %}
+
+{% block title %}{{title|default:"Razzia"}}{% endblock %}
+
+{% block content %}
+{% load static %}
+
+
+
+
+
+
+ {% block razzia_content %}{% endblock %}
+
+
+{% endblock %}
diff --git a/razzia/templates/razzia_search.html b/razzia/templates/razzia_search.html
new file mode 100644
index 00000000..9c7ad884
--- /dev/null
+++ b/razzia/templates/razzia_search.html
@@ -0,0 +1,31 @@
+{% extends "razzia_base.html" %}
+
+{% block razzia_content %}
+
+{% if queryname %}
+ {% if member %}
+ {% block member_present %}{% endblock %}
+ {% else %}
+ {% block member_not_present %}
+
+
+ {{queryname}} is not a fember!!!
+
+ {% endblock %}
+ {% endif %}
+{% endif %}
+{% endblock %}
diff --git a/razzia/tests.py b/razzia/tests.py
new file mode 100644
index 00000000..06f28d86
--- /dev/null
+++ b/razzia/tests.py
@@ -0,0 +1,77 @@
+from django.test import TestCase
+from django.urls import reverse
+from freezegun import freeze_time
+
+from razzia.models import Razzia
+
+import datetime
+
+
+class RazziaTests(TestCase):
+ fixtures = ["initial_data"]
+
+ def test_razzia_can_create_new(self):
+ previous_number_razzias = Razzia.objects.count()
+
+ self.client.login(username="tester", password="treotreo")
+ response = self.client.get(reverse("razzia_new"), follow=True)
+ last_url, status_code = response.redirect_chain[-1]
+
+ current_number_razzias = Razzia.objects.count()
+
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed(response, "razzia.html")
+ self.assertEqual(current_number_razzias, previous_number_razzias + 1)
+
+ def test_razzia_member_can_only_register_once(self):
+ self.client.login(username="tester", password="treotreo")
+ response = self.client.get(reverse("razzia_new"), follow=True)
+ razzia_url, _ = response.redirect_chain[-1]
+
+ response_add_1 = self.client.post(razzia_url, {"username": "jokke"}, follow=True)
+
+ response_add_2 = self.client.post(razzia_url, {"username": "jokke"}, follow=True)
+
+ self.assertEqual(response_add_1.status_code, 200)
+ self.assertEqual(response_add_2.status_code, 200)
+ self.assertTemplateUsed(response, "razzia.html")
+ # Note: Different interface, should be fixed later.
+ # self.assertNotContains(response_add_1, "already checked in", status_code=200)
+ # self.assertContains(response_add_2, "already checked in", status_code=200)
+
+ def test_razzia_member_can_register_multiple_times(self):
+ with freeze_time() as frozen_datetime:
+ self.client.login(username="tester", password="treotreo")
+ response = self.client.get(reverse("razzia_new"), follow=True)
+ razzia_url, _ = response.redirect_chain[-1]
+
+ response_members_0 = self.client.get(razzia_url + "members", follow=True)
+
+ response_add_1 = self.client.post(razzia_url, {"username": "jokke"}, follow=True)
+ frozen_datetime.tick(delta=datetime.timedelta(hours=1, minutes=1))
+ response_add_2 = self.client.post(razzia_url, {"username": "jokke"}, follow=True)
+
+ response_members_2 = self.client.get(razzia_url + "members", follow=True)
+
+ self.assertEqual(response_add_1.status_code, 200)
+ self.assertEqual(response_add_2.status_code, 200)
+ self.assertTemplateUsed(response_add_1, "razzia.html")
+ self.assertTemplateUsed(response_add_2, "razzia.html")
+ # Note: Different interface, should be fixed later.
+ # self.assertNotContains(response_add_1, "last checked in at", status_code=200)
+ # self.assertContains(response_add_2, "last checked in at", status_code=200)
+ self.assertContains(response_members_0, "0 fember(s)", status_code=200)
+ self.assertContains(response_members_2, "2 fember(s)", status_code=200)
+
+ def test_razzia_registered_member_is_in_member_list(self):
+ self.client.login(username="tester", password="treotreo")
+ response = self.client.get(reverse("razzia_new"), follow=True)
+ razzia_url, _ = response.redirect_chain[-1]
+
+ response_add = self.client.post(razzia_url, {"username": "jokke"}, follow=True)
+
+ response_members = self.client.get(razzia_url + "members", follow=True)
+
+ self.assertEqual(response_add.status_code, 200)
+ self.assertTemplateUsed(response_members, "members.html")
+ self.assertContains(response_members, "jokke", status_code=200)
diff --git a/razzia/urls.py b/razzia/urls.py
new file mode 100644
index 00000000..0af19db6
--- /dev/null
+++ b/razzia/urls.py
@@ -0,0 +1,9 @@
+from django.urls import re_path
+from . import views
+
+urlpatterns = [
+ re_path(r'^admin/razzia/(?P\d+)/$', views.razzia, name="razzia_view"),
+ re_path(r'^admin/razzia/(?P\d+)/members$', views.razzia_members, name="razzia_members_view"),
+ re_path(r'^admin/razzia/$', views.razzia_menu, name="razzia_menu"),
+ re_path(r'^admin/razzia/new$', views.new_razzia, name="razzia_new"),
+]
diff --git a/razzia/views.py b/razzia/views.py
new file mode 100644
index 00000000..b8f1d8aa
--- /dev/null
+++ b/razzia/views.py
@@ -0,0 +1,73 @@
+import datetime
+
+from django.contrib.auth.decorators import permission_required
+from django.shortcuts import redirect, render, get_object_or_404
+from django.utils import timezone
+
+from razzia.models import Razzia, RazziaEntry
+from stregsystem.models import Member
+
+
+# Create your views here.
+@permission_required("stregreport.host_razzia")
+def razzia(request, razzia_id):
+ if request.method == 'POST':
+ return razzia_view_single(request, razzia_id, request.POST['username'])
+ else:
+ return razzia_view_single(request, razzia_id, None)
+
+
+@permission_required("stregreport.host_razzia")
+def razzia_view_single(request, razzia_id, queryname, title=None):
+ razzia = get_object_or_404(Razzia, pk=razzia_id)
+
+ template = 'razzia.html'
+
+ if queryname is None:
+ return render(request, template, locals())
+
+ result = list(Member.objects.filter(username__iexact=queryname))
+ if len(result) == 0:
+ return render(request, template, locals())
+
+ member = result[0]
+
+ entries = list(razzia.razziaentry_set.filter(member__pk=member.pk).order_by('-time'))
+ turns_already = len(entries)
+
+ timed_out = False
+
+ # Get most recent visit
+ if len(entries) > 0:
+ timed_out = entries[0].time > timezone.now() - razzia.turn_interval
+
+ # Back too soon?
+ if timed_out:
+ drunkard = True
+ remaining_time_secs = int(((entries[0].time + razzia.turn_interval) - timezone.now()).total_seconds() % 60)
+ remaining_time_mins = int(((entries[0].time + razzia.turn_interval) - timezone.now()).total_seconds() // 60)
+ return render(request, template, locals())
+
+ RazziaEntry(member=member, razzia=razzia).save()
+
+ return render(request, template, locals())
+
+
+@permission_required("stregreport.host_razzia")
+def razzia_menu(request, new_text=None, title=None):
+ razzias = Razzia.objects.order_by('-pk')[:3]
+ return render(request, 'menu.html', locals())
+
+
+@permission_required("stregreport.host_razzia")
+def new_razzia(request):
+ razzia = Razzia(name="Foobar V2", turn_interval=datetime.timedelta(minutes=30))
+ razzia.save()
+
+ return redirect('razzia_view', razzia_id=razzia.pk)
+
+
+@permission_required("stregreport.host_razzia")
+def razzia_members(request, razzia_id, title=None):
+ razzia = get_object_or_404(Razzia, pk=razzia_id)
+ return render(request, 'members.html', locals())
diff --git a/stregreport/migrations/0009_rename_razziaentry_razziaentryold.py b/stregreport/migrations/0009_rename_razziaentry_razziaentryold.py
new file mode 100644
index 00000000..589fd1a5
--- /dev/null
+++ b/stregreport/migrations/0009_rename_razziaentry_razziaentryold.py
@@ -0,0 +1,21 @@
+# Generated by Django 4.1.13 on 2024-09-14 10:27
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ (
+ "stregsystem",
+ "0018_member_signup_due_paid_alter_mobilepayment_status_and_more",
+ ),
+ ("stregreport", "0008_auto_20231103_1126"),
+ ]
+
+ operations = [
+ migrations.RenameModel(
+ old_name="RazziaEntry",
+ new_name="RazziaEntryOld",
+ ),
+ ]
diff --git a/stregreport/models.py b/stregreport/models.py
index 9ed1b172..e8bb850b 100644
--- a/stregreport/models.py
+++ b/stregreport/models.py
@@ -11,12 +11,12 @@ class Meta:
FOOBAR = 'FB'
FNUGFALD = 'FF'
RAZZIA_CHOICES = [(BREAD, "Brødrazzia"), (FOOBAR, "Foobar razzia"), (FNUGFALD, "Fnugfald razzia")]
- members = models.ManyToManyField(Member, through='RazziaEntry')
+ members = models.ManyToManyField(Member, through='RazziaEntryOld')
start_date = models.DateTimeField(auto_now_add=True)
razzia_type = models.CharField(max_length=2, choices=RAZZIA_CHOICES, default=BREAD)
-class RazziaEntry(models.Model):
+class RazziaEntryOld(models.Model):
member = models.ForeignKey(Member, on_delete=models.CASCADE)
razzia = models.ForeignKey(BreadRazzia, on_delete=models.CASCADE)
time = models.DateTimeField(null=True, blank=True, auto_now_add=True)
diff --git a/stregreport/views.py b/stregreport/views.py
index 4a72af36..2766b9ee 100644
--- a/stregreport/views.py
+++ b/stregreport/views.py
@@ -14,7 +14,7 @@
from django.utils import dateparse, timezone
from stregreport.forms import CategoryReportForm
from stregsystem.models import Category, Member, Product, Sale
-from stregreport.models import BreadRazzia, RazziaEntry
+from stregreport.models import BreadRazzia, RazziaEntryOld
from stregsystem.templatetags.stregsystem_extras import money
@@ -103,7 +103,7 @@ def razzia_view_single(request, razzia_id, queryname, razzia_type=BreadRazzia.BR
except IndexError:
return render(request, templates[razzia_type], locals())
- entries = list(razzia.razziaentry_set.filter(member__pk=member.pk).order_by('-time'))
+ entries = list(razzia.razziaentryold_set.filter(member__pk=member.pk).order_by('-time'))
already_checked_in = len(entries) > 0
wait_time = datetime.timedelta(minutes=30)
if already_checked_in:
@@ -122,7 +122,7 @@ def razzia_view_single(request, razzia_id, queryname, razzia_type=BreadRazzia.BR
if not already_checked_in or (
(razzia_type == BreadRazzia.FOOBAR or razzia_type == BreadRazzia.FNUGFALD) and not within_wait
):
- RazziaEntry(member=member, razzia=razzia).save()
+ RazziaEntryOld(member=member, razzia=razzia).save()
return render(request, templates[razzia_type], locals())
diff --git a/stregsystem/forms.py b/stregsystem/forms.py
index 5cd33aad..55e225ce 100644
--- a/stregsystem/forms.py
+++ b/stregsystem/forms.py
@@ -84,9 +84,11 @@ class Meta:
model = Member
fields = ('notes', 'username', 'email', 'firstname', 'lastname', 'gender')
widgets = {
- 'notes': forms.TextInput(attrs={'autocomplete': "off", 'placeholder': "sw, dat, bait, ixd, dad, etc."}),
+ 'notes': forms.TextInput(
+ attrs={'autocomplete': "off", 'placeholder': "sw, dat, bait, ixd, dad, etc.", 'required': "required"}
+ ),
'username': forms.TextInput(attrs={'autocomplete': "off"}),
- 'email': forms.TextInput(attrs={'autocomplete': "off"}),
+ 'email': forms.TextInput(attrs={'autocomplete': "off", 'required': "required"}),
'firstname': forms.TextInput(attrs={'autocomplete': "off"}),
'lastname': forms.TextInput(attrs={'autocomplete': "off"}),
'gender': forms.Select(),
@@ -100,10 +102,16 @@ class Meta:
'gender': 'Biologisk køn(*)',
}
error_messages = {
+ 'notes': {
+ 'required': 'Udfyldning af `Studieretning` er påkrævet.',
+ },
'username': {
'required': 'Udfyldning af `Brugernavn` er påkrævet.',
'max_length': 'Længden af `Brugernavn` må ikke overstige 16 tegn.',
},
+ 'email': {
+ 'required': 'Udfyldning af `E-Mail` er påkrævet.',
+ },
'firstname': {
'required': 'Udfyldning af `Fornavn` er påkrævet.',
'max_length': 'Længden af `Fornavn` må ikke overstige 16 tegn.',
diff --git a/stregsystem/static/stregsystem/gdpr.js b/stregsystem/static/stregsystem/gdpr.js
deleted file mode 100644
index 7ae4f4aa..00000000
--- a/stregsystem/static/stregsystem/gdpr.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-Hides the username after 5 seconds of showing it.
-Simply replaces the letters with 'x'.
-*/
-
-var username_element = document.querySelectorAll(".username");
-
-if (username_element.length > 0) {
- setTimeout(function () {
- var username_element = document.querySelectorAll(".username");
- for (var i = 0; i < username_element.length; i++) {
- username_element[i].innerText = "xxxxxxxx";
- }
- var remainingbalance_element = document.querySelectorAll(".remainingbalance");
- for (var i = 0; i < remainingbalance_element.length; i++) {
- remainingbalance_element[i].innerText = "xx.xx";
- }
- }, 5000);
-}
\ No newline at end of file
diff --git a/stregsystem/static/stregsystem/stregsystem.css b/stregsystem/static/stregsystem/stregsystem.css
index de850b9f..ffafefa6 100644
--- a/stregsystem/static/stregsystem/stregsystem.css
+++ b/stregsystem/static/stregsystem/stregsystem.css
@@ -3,6 +3,22 @@ body {
background-color: white;
}
+header {
+ display: grid;
+ grid-template-columns: 1fr auto 1fr;
+ padding: 3px 4vw;
+ column-gap: 4vw;
+ text-align: center;
+ place-items: center;
+
+ & .left {
+ justify-self: start;
+ }
+ & .right {
+ justify-self: end;
+ }
+}
+
h1 { color: red }
/*div { border-color: red;
diff --git a/stregsystem/templates/admin/stregsystem/razzia/members.html b/stregsystem/templates/admin/stregsystem/razzia/members.html
index 49be2cb6..5acafad0 100644
--- a/stregsystem/templates/admin/stregsystem/razzia/members.html
+++ b/stregsystem/templates/admin/stregsystem/razzia/members.html
@@ -6,7 +6,7 @@
{% block razzia_content %}
Back to razzia
Registered members at razzia {{ razzia.start_date | date:"D d M Y" }} - {{ razzia.members.all | length }} fember(s)
- {% for entry in razzia.razziaentry_set.all %}
+ {% for entry in razzia.razziaentryold_set.all %}
{{ entry.member.firstname }} {{ entry.member.lastname }} ({{ entry.member.username }}) at {{entry.time}}
diff --git a/stregsystem/templates/stregsystem/base.html b/stregsystem/templates/stregsystem/base.html
index 76a97b27..5e5d93bd 100644
--- a/stregsystem/templates/stregsystem/base.html
+++ b/stregsystem/templates/stregsystem/base.html
@@ -10,7 +10,7 @@
-
+
{% block head %}
{% endblock %}
@@ -19,7 +19,7 @@
var media_url = "{% get_media_prefix %}";
-
+
{% comment %}
{% filter escape %}{% debug %}{% endfilter %}
@@ -28,29 +28,20 @@
-
-
+
{% block content %}{% endblock %}
@@ -67,7 +58,6 @@ {% block heading %}TREOENs STREGSYSTEM
-
diff --git a/stregsystem/templates/stregsystem/gdpr.html b/stregsystem/templates/stregsystem/gdpr.html
new file mode 100644
index 00000000..db86102a
--- /dev/null
+++ b/stregsystem/templates/stregsystem/gdpr.html
@@ -0,0 +1,44 @@
+{% comment %}
+Hides sensitive user info after 5 seconds.
+This code is inlined to ensure that the page can never load without it.
+The JS removes the text outright from the page.
+The CSS visually hides the text, and also makes the whole thing look nice.
+If JS or CSS is disabled/broken, the other solution can still remove the information,
+which means this setup is much more likely to work even in weird browsers.
+{% endcomment %}
+
+
diff --git a/stregsystem/templates/stregsystem/index_sale.html b/stregsystem/templates/stregsystem/index_sale.html
index dcc641cd..9eb395bf 100644
--- a/stregsystem/templates/stregsystem/index_sale.html
+++ b/stregsystem/templates/stregsystem/index_sale.html
@@ -2,6 +2,10 @@
{% load stregsystem_extras %}
+{% block head %}
+{{ block.super }}
+{% include "stregsystem/gdpr.html" %}
+{% endblock %}
{% block message %}
diff --git a/stregsystem/templates/stregsystem/signup_status.html b/stregsystem/templates/stregsystem/signup_status.html
index 221bc0d0..8acad2e0 100644
--- a/stregsystem/templates/stregsystem/signup_status.html
+++ b/stregsystem/templates/stregsystem/signup_status.html
@@ -13,5 +13,7 @@
{{ mobilepay_qr_svg|safe }}
+
+
{% endblock %}
\ No newline at end of file
diff --git a/treo/settings.py b/treo/settings.py
index 4994f69b..37471b45 100644
--- a/treo/settings.py
+++ b/treo/settings.py
@@ -72,7 +72,7 @@
CSRF_COOKIE_SECURE = cfg.getboolean("debug", "CSRF_COOKIE_SECURE")
CSRF_COOKIE_HTTPONLY = cfg.getboolean("debug", "CSRF_COOKIE_HTTPONLY")
-CSRF_TRUSTED_ORIGINS = ["https://fappen.fklub.dk"]
+CSRF_TRUSTED_ORIGINS = ["https://fappen.fklub.dk", "https://stregsystem.fklub.dk"]
SESSION_COOKIE_SECURE = cfg.getboolean("debug", "SESSION_COOKIT_SECURE")
SECURE_BROWSER_XSS_FILTER = cfg.getboolean("debug", "SECURE_BROWSER_XSS_FILTER")
@@ -94,6 +94,7 @@
'stregsystem',
'stregreport',
'kiosk',
+ 'razzia',
'django_select2',
'django.contrib.admin',
'django.contrib.auth',
diff --git a/treo/urls.py b/treo/urls.py
index b27d328e..653fa283 100644
--- a/treo/urls.py
+++ b/treo/urls.py
@@ -22,6 +22,7 @@
urlpatterns = [
re_path(r'^', include("stregsystem.urls")),
re_path(r'^', include("stregreport.urls")),
+ re_path(r'^', include("razzia.urls")),
re_path(r'^kiosk/', include("kiosk.urls")),
re_path(r'^admin/', admin.site.urls),