From a6e70ece5953722f0aca43fa74e1d95485ee8f07 Mon Sep 17 00:00:00 2001
From: "N. Geisler" <ngeisler@fachschaft.informatik.tu-darmstadt.de>
Date: Sun, 10 May 2020 23:02:27 +0200
Subject: [PATCH] AK: add interest incrementation

AK model: add online interest field, add increment function
add increment and redirect view
add Button and counter in detail view
add translations
---
 AKModel/admin.py                              |  28 +-
 AKModel/locale/de_DE/LC_MESSAGES/django.po    | 241 ++++++++++--------
 .../migrations/0030_AK_interest_counter.py    |  18 ++
 AKModel/models.py                             |   6 +
 .../locale/de_DE/LC_MESSAGES/django.po        | 208 +++++++--------
 .../templates/AKSubmission/ak_detail.html     |  10 +-
 AKSubmission/urls.py                          |   1 +
 AKSubmission/views.py                         |  14 +-
 8 files changed, 288 insertions(+), 238 deletions(-)
 create mode 100644 AKModel/migrations/0030_AK_interest_counter.py

diff --git a/AKModel/admin.py b/AKModel/admin.py
index 301b9109..c9b33885 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -38,9 +38,7 @@ class AKOwnerAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKOwnerAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKOwnerAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 @admin.register(AKCategory)
@@ -54,9 +52,7 @@ class AKCategoryAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKCategoryAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKCategoryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 @admin.register(AKTrack)
@@ -70,9 +66,7 @@ class AKTrackAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKTrackAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKTrackAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 @admin.register(AKTag)
@@ -95,9 +89,7 @@ class AKRequirementAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKRequirementAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKRequirementAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 class WishFilter(SimpleListFilter):
@@ -133,9 +125,7 @@ class AKAdmin(admin.ModelAdmin):
         return obj.wish
 
     def wiki_export(self, request, queryset):
-        return render(request,
-                      'admin/AKModel/wiki_export.html',
-                      context={"AKs": queryset})
+        return render(request, 'admin/AKModel/wiki_export.html', context={"AKs": queryset})
 
     wiki_export.short_description = _("Export to wiki syntax")
 
@@ -144,9 +134,7 @@ class AKAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 @admin.register(Room)
@@ -187,9 +175,7 @@ class AKSlotAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
             kwargs['initial'] = Event.get_next_active()
-        return super(AKSlotAdmin, self).formfield_for_foreignkey(
-            db_field, request, **kwargs
-        )
+        return super(AKSlotAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
 
 @admin.register(Availability)
diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po
index cb194b18..3787adb1 100644
--- a/AKModel/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-10 17:15+0000\n"
+"POT-Creation-Date: 2020-05-10 20:54+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -11,152 +11,155 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: admin.py:32
+#: AKModel/admin.py:96
 msgid "Wish"
 msgstr "AK-Wunsch"
 
-#: admin.py:38
+#: AKModel/admin.py:102
 msgid "Is wish"
 msgstr "Ist ein Wunsch"
 
-#: admin.py:39
+#: AKModel/admin.py:103
 msgid "Is not a wish"
 msgstr "Ist kein Wunsch"
 
-#: admin.py:65
+#: AKModel/admin.py:130
 msgid "Export to wiki syntax"
 msgstr "In Wiki-Syntax exportieren"
 
-#: availability.py:38 models.py:37 models.py:57 models.py:109 models.py:128
-#: models.py:160 models.py:211 models.py:247 models.py:277
+#: AKModel/availability.py:38 AKModel/models.py:37 AKModel/models.py:65
+#: AKModel/models.py:117 AKModel/models.py:136 AKModel/models.py:168
+#: AKModel/models.py:221 AKModel/models.py:261 AKModel/models.py:291
 msgid "Event"
 msgstr "Event"
 
-#: availability.py:39 models.py:58 models.py:110 models.py:129 models.py:161
-#: models.py:212 models.py:248 models.py:278
+#: AKModel/availability.py:39 AKModel/models.py:66 AKModel/models.py:118
+#: AKModel/models.py:137 AKModel/models.py:169 AKModel/models.py:222
+#: AKModel/models.py:262 AKModel/models.py:292
 msgid "Associated event"
 msgstr "Zugehöriges Event"
 
-#: availability.py:47
+#: AKModel/availability.py:47
 msgid "Person"
 msgstr "Person"
 
-#: availability.py:48
+#: AKModel/availability.py:48
 msgid "Person whose availability this is"
 msgstr "Person deren Verfügbarkeit hier abgebildet wird"
 
-#: availability.py:56 models.py:251 models.py:270
+#: AKModel/availability.py:56 AKModel/models.py:265 AKModel/models.py:284
 msgid "Room"
 msgstr "Raum"
 
-#: availability.py:57
+#: AKModel/availability.py:57
 msgid "Room whose availability this is"
 msgstr "Raum dessen Verfügbarkeit hier abgebildet wird"
 
-#: availability.py:65 models.py:215 models.py:269
+#: AKModel/availability.py:65 AKModel/models.py:225 AKModel/models.py:283
 msgid "AK"
 msgstr "AK"
 
-#: availability.py:66
+#: AKModel/availability.py:66
 msgid "AK whose availability this is"
 msgstr "Verfügbarkeiten"
 
-#: availability.py:74 models.py:113
+#: AKModel/availability.py:74 AKModel/models.py:121
 msgid "AK Category"
 msgstr "AK Kategorie"
 
-#: availability.py:75
+#: AKModel/availability.py:75
 msgid "AK Category whose availability this is"
 msgstr "AK Kategorie dessen Verfügbarkeit hier abgebildet wird"
 
-#: availability.py:235
+#: AKModel/availability.py:235
 msgid "Availability"
 msgstr "Verfügbarkeit"
 
-#: availability.py:236
+#: AKModel/availability.py:236
 msgid "Availabilities"
 msgstr "Verfügbarkeiten"
 
-#: models.py:14 models.py:104 models.py:125 models.py:144 models.py:158
-#: models.py:176 models.py:240
+#: AKModel/models.py:14 AKModel/models.py:112 AKModel/models.py:133
+#: AKModel/models.py:152 AKModel/models.py:166 AKModel/models.py:184
+#: AKModel/models.py:254
 msgid "Name"
 msgstr "Name"
 
-#: models.py:15
+#: AKModel/models.py:15
 msgid "Name or iteration of the event"
 msgstr "Name oder Iteration des Events"
 
-#: models.py:16
+#: AKModel/models.py:16
 msgid "Short Form"
 msgstr "Kurzer Name"
 
-#: models.py:17
+#: AKModel/models.py:17
 msgid "Short name of letters/numbers/dots/dashes/underscores used in URLs."
 msgstr ""
 "Kurzname bestehend aus Buchstaben, Nummern, Punkten und Unterstrichen zur "
 "Nutzung in URLs"
 
-#: models.py:19
+#: AKModel/models.py:19
 msgid "Place"
 msgstr "Ort"
 
-#: models.py:20
+#: AKModel/models.py:20
 msgid "City etc. the event takes place in"
 msgstr "Stadt o.ä. in der das Event stattfindet"
 
-#: models.py:22
+#: AKModel/models.py:22
 msgid "Time Zone"
 msgstr "Zeitzone"
 
-#: models.py:22
+#: AKModel/models.py:22
 msgid "Time Zone where this event takes place in"
 msgstr "Zeitzone in der das Event stattfindet"
 
-#: models.py:23
+#: AKModel/models.py:23
 msgid "Start"
 msgstr "Start"
 
-#: models.py:23
+#: AKModel/models.py:23
 msgid "Time the event begins"
 msgstr "Zeit zu der das Event beginnt"
 
-#: models.py:24
+#: AKModel/models.py:24
 msgid "End"
 msgstr "Ende"
 
-#: models.py:24
+#: AKModel/models.py:24
 msgid "Time the event ends"
 msgstr "Zeit zu der das Event endet"
 
-#: models.py:26
+#: AKModel/models.py:26
 msgid "Active State"
 msgstr "Aktiver Status"
 
-#: models.py:26
+#: AKModel/models.py:26
 msgid "Marks currently active events"
 msgstr "Markiert aktuell aktive Events"
 
-#: models.py:28
+#: AKModel/models.py:28
 msgid "Base URL"
 msgstr "URL-Prefix"
 
-#: models.py:28
+#: AKModel/models.py:28
 msgid "Prefix for wiki link construction"
 msgstr "Prefix für die automatische Generierung von Wiki-Links"
 
-#: models.py:29
+#: AKModel/models.py:29
 msgid "Default Slot Length"
 msgstr "Standardslotlänge"
 
-#: models.py:30
+#: AKModel/models.py:30
 msgid "Default length in hours that is assumed for AKs in this event."
 msgstr "Standardlänge von Slots (in Stunden) für dieses Event"
 
-#: models.py:32
+#: AKModel/models.py:32
 msgid "Contact email address"
 msgstr "E-Mail Kontaktadresse"
 
-#: models.py:34
+#: AKModel/models.py:34
 msgid ""
 "An email address that is displayed on every page and can be used for all "
 "kinds of questions"
@@ -164,296 +167,308 @@ msgstr ""
 "Eine Mailadresse die auf jeder Seite angezeigt wird und für alle Arten von "
 "Fragen genutzt werden kann"
 
-#: models.py:38
+#: AKModel/models.py:38
 msgid "Events"
 msgstr "Events"
 
-#: models.py:52
+#: AKModel/models.py:60
 msgid "Nickname"
 msgstr "Spitzname"
 
-#: models.py:52
+#: AKModel/models.py:60
 msgid "Name to identify an AK owner by"
 msgstr "Name durch den eine AK Leitung identifiziert wird"
 
-#: models.py:53
+#: AKModel/models.py:61
 msgid "Slug"
 msgstr "Slug"
 
-#: models.py:53
+#: AKModel/models.py:61
 msgid "Slug for URL generation"
 msgstr "Slug für URL-Generierung"
 
-#: models.py:54
+#: AKModel/models.py:62
 msgid "Institution"
 msgstr "Instutution"
 
-#: models.py:54
+#: AKModel/models.py:62
 msgid "Uni etc."
 msgstr "Universität o.ä."
 
-#: models.py:55 models.py:185
+#: AKModel/models.py:63 AKModel/models.py:193
 msgid "Web Link"
 msgstr "Internet Link"
 
-#: models.py:55
+#: AKModel/models.py:63
 msgid "Link to Homepage"
 msgstr "Link zu Homepage oder Webseite"
 
-#: models.py:61
+#: AKModel/models.py:69
 msgid "AK Owner"
 msgstr "AK Leitung"
 
-#: models.py:62
+#: AKModel/models.py:70
 msgid "AK Owners"
 msgstr "AK Leitungen"
 
-#: models.py:104
+#: AKModel/models.py:112
 msgid "Name of the AK Category"
 msgstr "Name des AK Kategorie"
 
-#: models.py:105 models.py:126
+#: AKModel/models.py:113 AKModel/models.py:134
 msgid "Color"
 msgstr "Farbe"
 
-#: models.py:105 models.py:126
+#: AKModel/models.py:113 AKModel/models.py:134
 msgid "Color for displaying"
 msgstr "Farbe für die Anzeige"
 
-#: models.py:106 models.py:179
+#: AKModel/models.py:114 AKModel/models.py:187
 msgid "Description"
 msgstr "Beschreibung"
 
-#: models.py:107
+#: AKModel/models.py:115
 msgid "Short description of this AK Category"
 msgstr "Beschreibung der AK-Kategorie"
 
-#: models.py:114
+#: AKModel/models.py:122
 msgid "AK Categories"
 msgstr "AK Kategorien"
 
-#: models.py:125
+#: AKModel/models.py:133
 msgid "Name of the AK Track"
 msgstr "Name des AK Tracks"
 
-#: models.py:132
+#: AKModel/models.py:140
 msgid "AK Track"
 msgstr "AK Track"
 
-#: models.py:133
+#: AKModel/models.py:141
 msgid "AK Tracks"
 msgstr "AK Tracks"
 
-#: models.py:144
+#: AKModel/models.py:152
 msgid "Name of the AK Tag"
 msgstr "Name das AK Tags"
 
-#: models.py:147
+#: AKModel/models.py:155
 msgid "AK Tag"
 msgstr "AK Tag"
 
-#: models.py:148
+#: AKModel/models.py:156
 msgid "AK Tags"
 msgstr "AK Tags"
 
-#: models.py:158
+#: AKModel/models.py:166
 msgid "Name of the Requirement"
 msgstr "Name der Anforderung"
 
-#: models.py:164
+#: AKModel/models.py:172
 msgid "AK Requirement"
 msgstr "AK Anforderung"
 
-#: models.py:165
+#: AKModel/models.py:173
 msgid "AK Requirements"
 msgstr "AK Anforderungen"
 
-#: models.py:176
+#: AKModel/models.py:184
 msgid "Name of the AK"
 msgstr "Name des AKs"
 
-#: models.py:177
+#: AKModel/models.py:185
 msgid "Short Name"
 msgstr "Kurzer Name"
 
-#: models.py:178
+#: AKModel/models.py:186
 msgid "Name displayed in the schedule"
 msgstr "Name zur Anzeige im AK Plan"
 
-#: models.py:179
+#: AKModel/models.py:187
 msgid "Description of the AK"
 msgstr "Beschreibung des AKs"
 
-#: models.py:181
+#: AKModel/models.py:189
 msgid "Owners"
 msgstr "Leitungen"
 
-#: models.py:182
+#: AKModel/models.py:190
 msgid "Those organizing the AK"
 msgstr "Menschen, die den AK organisieren und halten"
 
-#: models.py:185
+#: AKModel/models.py:193
 msgid "Link to wiki page"
 msgstr "Link zur Wiki Seite"
 
-#: models.py:187
+#: AKModel/models.py:195
 msgid "Category"
 msgstr "Kategorie"
 
-#: models.py:188
+#: AKModel/models.py:196
 msgid "Category of the AK"
 msgstr "Kategorie des AKs"
 
-#: models.py:189
+#: AKModel/models.py:197
 msgid "Tags"
 msgstr "Tags"
 
-#: models.py:189
+#: AKModel/models.py:197
 msgid "Tags provided by owners"
 msgstr "Tags, die durch die AK Leitung vergeben wurden"
 
-#: models.py:190
+#: AKModel/models.py:198
 msgid "Track"
 msgstr "Track"
 
-#: models.py:191
+#: AKModel/models.py:199
 msgid "Track the AK belongs to"
 msgstr "Track zu dem der AK gehört"
 
-#: models.py:193
+#: AKModel/models.py:201
 msgid "Resolution Intention"
 msgstr "Resolutionsabsicht"
 
-#: models.py:194
+#: AKModel/models.py:202
 msgid "Intends to submit a resolution"
 msgstr "Beabsichtigt eine Resolution einzureichen"
 
-#: models.py:195
+#: AKModel/models.py:203
 msgid "Present this AK"
 msgstr "AK Präsentieren"
 
-#: models.py:196
+#: AKModel/models.py:204
 msgid "Present results of this AK"
 msgstr "Die Ergebnisse dieses AKs vorstellen"
 
-#: models.py:198
+#: AKModel/models.py:206
 msgid "Requirements"
 msgstr "Anforderungen"
 
-#: models.py:199
+#: AKModel/models.py:207
 msgid "AK's Requirements"
 msgstr "Anforderungen des AKs"
 
-#: models.py:201
+#: AKModel/models.py:209
 msgid "Conflicting AKs"
 msgstr "AK Konflikte"
 
-#: models.py:202
+#: AKModel/models.py:210
 msgid "AKs that conflict and thus must not take place at the same time"
 msgstr ""
 "AKs, die Konflikte haben und deshalb nicht gleichzeitig stattfinden dürfen"
 
-#: models.py:203
+#: AKModel/models.py:211
 msgid "Prerequisite AKs"
 msgstr "Vorausgesetzte AKs"
 
-#: models.py:204
+#: AKModel/models.py:212
 msgid "AKs that should precede this AK in the schedule"
 msgstr "AKS die im AK Plan vor diesem AK stattfinden müssen"
 
-#: models.py:206
+#: AKModel/models.py:214
 #, fuzzy
 #| msgid "Internal Notes"
 msgid "Organizational Notes"
 msgstr "Interne Notizen"
 
-#: models.py:207
+#: AKModel/models.py:215
 msgid ""
 "Notes to organizers. These are public. For private notes, please send an e-"
 "mail."
-msgstr "Notizen an die Organisator*innen. Diese sind öffentlich, für private Anmerkungen bitte eine E-Mail schicken."
+msgstr ""
+"Notizen an die Organisator*innen. Diese sind öffentlich, für private "
+"Anmerkungen bitte eine E-Mail schicken."
 
-#: models.py:209
+#: AKModel/models.py:217
 msgid "Interest"
 msgstr "Interesse"
 
-#: models.py:209
+#: AKModel/models.py:217
 msgid "Expected number of people"
 msgstr "Erwartete Personenzahl"
 
-#: models.py:216
+#: AKModel/models.py:218
+#, fuzzy
+#| msgid "Interest"
+msgid "Interest Counter"
+msgstr "Interesse"
+
+#: AKModel/models.py:219
+msgid "People who have indicated interest online"
+msgstr "Anzahl Personen, die online Interesse bekundet haben"
+
+#: AKModel/models.py:226
 msgid "AKs"
 msgstr "AKs"
 
-#: models.py:240
+#: AKModel/models.py:254
 msgid "Name or number of the room"
 msgstr "Name oder Nummer des Raums"
 
-#: models.py:241
+#: AKModel/models.py:255
 msgid "Building"
 msgstr "Gebäude"
 
-#: models.py:242
+#: AKModel/models.py:256
 msgid "Name or number of the building"
 msgstr "Name oder Nummer des Gebäudes"
 
-#: models.py:243
+#: AKModel/models.py:257
 msgid "Capacity"
 msgstr "Kapazität"
 
-#: models.py:243
+#: AKModel/models.py:257
 msgid "Maximum number of people"
 msgstr "Maximale Personenzahl"
 
-#: models.py:244
+#: AKModel/models.py:258
 msgid "Properties"
 msgstr "Eigenschaften"
 
-#: models.py:245
+#: AKModel/models.py:259
 msgid "AK requirements fulfilled by the room"
 msgstr "AK Anforderungen, die dieser Raum erfüllt"
 
-#: models.py:252
+#: AKModel/models.py:266
 msgid "Rooms"
 msgstr "Räume"
 
-#: models.py:269
+#: AKModel/models.py:283
 msgid "AK being mapped"
 msgstr "AK, der zugeordnet wird"
 
-#: models.py:271
+#: AKModel/models.py:285
 msgid "Room the AK will take place in"
 msgstr "Raum in dem der AK stattfindet"
 
-#: models.py:272
+#: AKModel/models.py:286
 msgid "Slot Begin"
 msgstr "Beginn des Slots"
 
-#: models.py:272
+#: AKModel/models.py:286
 msgid "Time and date the slot begins"
 msgstr "Zeit und Datum zu der der AK beginnt"
 
-#: models.py:274
+#: AKModel/models.py:288
 msgid "Duration"
 msgstr "Dauer"
 
-#: models.py:275
+#: AKModel/models.py:289
 msgid "Length in hours"
 msgstr "Länge in Stunden"
 
-#: models.py:280
+#: AKModel/models.py:294
 msgid "Last update"
 msgstr "Letzte Aktualisierung"
 
-#: models.py:283
+#: AKModel/models.py:297
 msgid "AK Slot"
 msgstr "AK Slot"
 
-#: models.py:284
+#: AKModel/models.py:298
 msgid "AK Slots"
 msgstr "AK Slot"
 
-#: models.py:298
+#: AKModel/models.py:312
 msgid "Not scheduled yet"
 msgstr "Noch nicht geplant"
 
diff --git a/AKModel/migrations/0030_AK_interest_counter.py b/AKModel/migrations/0030_AK_interest_counter.py
new file mode 100644
index 00000000..87c04fde
--- /dev/null
+++ b/AKModel/migrations/0030_AK_interest_counter.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.6 on 2020-05-10 19:56
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ('AKModel', '0029_AK_notes'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='ak',
+            name='interest_counter',
+            field=models.IntegerField(default=0, help_text='People who have indicated interest online',
+                                      verbose_name='Interest Counter'),
+        ),
+    ]
diff --git a/AKModel/models.py b/AKModel/models.py
index 2e675a76..2a5409c3 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -211,6 +211,8 @@ class AK(models.Model):
         'Notes to organizers. These are public. For private notes, please send an e-mail.'))
 
     interest = models.IntegerField(default=-1, verbose_name=_('Interest'), help_text=_('Expected number of people'))
+    interest_counter = models.IntegerField(default=0, verbose_name=_('Interest Counter'),
+                                           help_text=_('People who have indicated interest online'))
 
     event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'),
                               help_text=_('Associated event'))
@@ -237,6 +239,10 @@ class AK(models.Model):
     def wish(self):
         return self.owners.count() == 0
 
+    def increment_interest(self):
+        self.interest_counter += 1
+        self.save()
+
 
 class Room(models.Model):
     """ A room describes where an AK can be held.
diff --git a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
index 834d6bcc..1c58ddb7 100644
--- a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-10 17:14+0000\n"
+"POT-Creation-Date: 2020-05-10 20:54+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,20 +17,20 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: forms.py:43
+#: AKSubmission/forms.py:43
 msgid "Separate multiple tags with semicolon"
 msgstr "Mehrere Tags mit Semikolon trennen"
 
-#: forms.py:69
+#: AKSubmission/forms.py:69
 #, python-format
 msgid "\"%(duration)s\" is not a valid duration"
 msgstr "\"%(duration)s\" ist keine gültige Dauer"
 
-#: forms.py:112
+#: AKSubmission/forms.py:112
 msgid "Duration(s)"
 msgstr "Dauer(n)"
 
-#: forms.py:114
+#: AKSubmission/forms.py:114
 msgid ""
 "Enter at least one planned duration (in hours). If your AK should have "
 "multiple slots, use multiple lines"
@@ -38,261 +38,267 @@ msgstr ""
 "Mindestens eine geplante Dauer (in Stunden) angeben. Wenn der AK mehrere "
 "Slots haben soll, mehrere Zeilen verwenden"
 
-#: templates/AKSubmission/ak_detail.html:10
-#: templates/AKSubmission/ak_edit.html:8 templates/AKSubmission/ak_list.html:8
-#: templates/AKSubmission/akowner_create_update.html:7
-#: templates/AKSubmission/akslot_add_update.html:7
-#: templates/AKSubmission/akslot_delete.html:7
-#: templates/AKSubmission/submission_overview.html:6
-#: templates/AKSubmission/submission_overview.html:23
-#: templates/AKSubmission/submit_new.html:8
-#: templates/AKSubmission/submit_new_wish.html:5
+#: AKSubmission/templates/AKSubmission/ak_detail.html:10
+#: AKSubmission/templates/AKSubmission/ak_edit.html:8
+#: AKSubmission/templates/AKSubmission/ak_list.html:8
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:7
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:7
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:7
+#: AKSubmission/templates/AKSubmission/submission_overview.html:6
+#: AKSubmission/templates/AKSubmission/submission_overview.html:23
+#: AKSubmission/templates/AKSubmission/submit_new.html:8
+#: AKSubmission/templates/AKSubmission/submit_new_wish.html:5
 msgid "AKs"
 msgstr "AKs"
 
-#: templates/AKSubmission/ak_detail.html:10
-#: templates/AKSubmission/akslot_delete.html:31
+#: AKSubmission/templates/AKSubmission/ak_detail.html:10
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:31
 msgid "AK"
 msgstr "AK"
 
-#: templates/AKSubmission/ak_detail.html:15
-#: templates/AKSubmission/ak_edit.html:13
-#: templates/AKSubmission/ak_list.html:22
-#: templates/AKSubmission/akowner_create_update.html:12
-#: templates/AKSubmission/akslot_add_update.html:12
-#: templates/AKSubmission/akslot_delete.html:12
-#: templates/AKSubmission/submission_overview.html:6
-#: templates/AKSubmission/submission_overview.html:19
-#: templates/AKSubmission/submit_new.html:18
-#: templates/AKSubmission/submit_new_wish.html:10
+#: AKSubmission/templates/AKSubmission/ak_detail.html:15
+#: AKSubmission/templates/AKSubmission/ak_edit.html:13
+#: AKSubmission/templates/AKSubmission/ak_list.html:22
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:12
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:12
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:12
+#: AKSubmission/templates/AKSubmission/submission_overview.html:6
+#: AKSubmission/templates/AKSubmission/submission_overview.html:19
+#: AKSubmission/templates/AKSubmission/submit_new.html:18
+#: AKSubmission/templates/AKSubmission/submit_new_wish.html:10
 msgid "AK Submission"
 msgstr "AK-Eintragung"
 
-#: templates/AKSubmission/ak_detail.html:37
-#: templates/AKSubmission/ak_list_table.html:32
+#: AKSubmission/templates/AKSubmission/ak_detail.html:29
+msgid "Interest"
+msgstr "Interesse"
+
+#: AKSubmission/templates/AKSubmission/ak_detail.html:42
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:32
 msgid "AK Wish"
 msgstr "AK-Wunsch"
 
-#: templates/AKSubmission/ak_detail.html:41
-#: templates/AKSubmission/ak_list_table.html:10
+#: AKSubmission/templates/AKSubmission/ak_detail.html:46
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:10
 msgid "Who?"
 msgstr "Wer?"
 
-#: templates/AKSubmission/ak_detail.html:45
-#: templates/AKSubmission/ak_list_table.html:11
+#: AKSubmission/templates/AKSubmission/ak_detail.html:50
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:11
 msgid "Category"
 msgstr "Kategorie"
 
-#: templates/AKSubmission/ak_detail.html:51
+#: AKSubmission/templates/AKSubmission/ak_detail.html:56
 msgid "Present this AK"
 msgstr "Diesen AK vorstellen"
 
-#: templates/AKSubmission/ak_detail.html:55
-#: templates/AKSubmission/ak_list.html:35
-#: templates/AKSubmission/ak_list_table.html:12
+#: AKSubmission/templates/AKSubmission/ak_detail.html:60
+#: AKSubmission/templates/AKSubmission/ak_list.html:35
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:12
 msgid "Tags"
 msgstr "Tags"
 
-#: templates/AKSubmission/ak_detail.html:61
+#: AKSubmission/templates/AKSubmission/ak_detail.html:66
 msgid "Reso?"
 msgstr "Reso?"
 
-#: templates/AKSubmission/ak_detail.html:68
+#: AKSubmission/templates/AKSubmission/ak_detail.html:73
 msgid "Requirements"
 msgstr "Anforderungen"
 
-#: templates/AKSubmission/ak_detail.html:81
+#: AKSubmission/templates/AKSubmission/ak_detail.html:86
 msgid "Conflicting AKs"
 msgstr "AK Konflikte"
 
-#: templates/AKSubmission/ak_detail.html:89
+#: AKSubmission/templates/AKSubmission/ak_detail.html:94
 msgid "Prerequisite AKs"
 msgstr "AK Voraussetzungen"
 
-#: templates/AKSubmission/ak_detail.html:97
+#: AKSubmission/templates/AKSubmission/ak_detail.html:102
 msgid "Notes"
 msgstr "Notizen"
 
-#: templates/AKSubmission/ak_detail.html:114
+#: AKSubmission/templates/AKSubmission/ak_detail.html:119
 msgid "When?"
 msgstr "Wann?"
 
-#: templates/AKSubmission/ak_detail.html:115
-#: templates/AKSubmission/akslot_delete.html:35
+#: AKSubmission/templates/AKSubmission/ak_detail.html:120
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:35
 msgid "Duration"
 msgstr "Dauer"
 
-#: templates/AKSubmission/ak_detail.html:116
+#: AKSubmission/templates/AKSubmission/ak_detail.html:121
 msgid "Room"
 msgstr "Raum"
 
-#: templates/AKSubmission/ak_detail.html:142
+#: AKSubmission/templates/AKSubmission/ak_detail.html:147
 msgid "Add another slot"
 msgstr "Einen neuen AK-Slot hinzufügen"
 
-#: templates/AKSubmission/ak_edit.html:8 templates/AKSubmission/ak_edit.html:21
+#: AKSubmission/templates/AKSubmission/ak_edit.html:8
+#: AKSubmission/templates/AKSubmission/ak_edit.html:21
 msgid "Edit AK"
 msgstr "AK bearbeiten"
 
-#: templates/AKSubmission/ak_edit.html:16
+#: AKSubmission/templates/AKSubmission/ak_edit.html:16
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: templates/AKSubmission/ak_list.html:23
-#: templates/AKSubmission/ak_list.html:27
+#: AKSubmission/templates/AKSubmission/ak_list.html:23
+#: AKSubmission/templates/AKSubmission/ak_list.html:27
 msgid "AK List"
 msgstr "AK Liste"
 
-#: templates/AKSubmission/ak_list.html:29
+#: AKSubmission/templates/AKSubmission/ak_list.html:29
 msgid "Categories"
 msgstr "Kategorie"
 
-#: templates/AKSubmission/ak_list_table.html:9
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:9
 msgid "Name"
 msgstr "Name"
 
-#: templates/AKSubmission/ak_list_table.html:23
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:23
 msgid "present this AK"
 msgstr "Diesen AK vorstellen"
 
-#: templates/AKSubmission/ak_list_table.html:27
+#: AKSubmission/templates/AKSubmission/ak_list_table.html:27
 msgid "Reso"
 msgstr "Reso"
 
-#: templates/AKSubmission/akowner_create_update.html:7
-#: templates/AKSubmission/akowner_create_update.html:13
-#: templates/AKSubmission/akowner_create_update.html:18
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:7
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:13
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:18
 msgid "AK Owner"
 msgstr "AK-Leitung"
 
-#: templates/AKSubmission/akowner_create_update.html:24
-#: templates/AKSubmission/akslot_add_update.html:26
-#: templates/AKSubmission/submit_new.html:34
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:24
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:26
+#: AKSubmission/templates/AKSubmission/submit_new.html:34
 msgid "Reset"
 msgstr "Zurücksetzen"
 
-#: templates/AKSubmission/akowner_create_update.html:28
-#: templates/AKSubmission/akslot_add_update.html:30
-#: templates/AKSubmission/akslot_delete.html:42
-#: templates/AKSubmission/submit_new.html:38
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:28
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:30
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:42
+#: AKSubmission/templates/AKSubmission/submit_new.html:38
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: templates/AKSubmission/akowner_create_update.html:31
-#: templates/AKSubmission/akslot_add_update.html:33
+#: AKSubmission/templates/AKSubmission/akowner_create_update.html:31
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:33
 msgid "Continue"
 msgstr "Weiter"
 
-#: templates/AKSubmission/akslot_add_update.html:7
-#: templates/AKSubmission/akslot_add_update.html:15
-#: templates/AKSubmission/akslot_add_update.html:20
-#: templates/AKSubmission/akslot_delete.html:7
-#: templates/AKSubmission/akslot_delete.html:15
-#: templates/AKSubmission/akslot_delete.html:20
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:7
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:15
+#: AKSubmission/templates/AKSubmission/akslot_add_update.html:20
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:7
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:15
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:20
 msgid "AK Duration(s)"
 msgstr "AK-Dauer(n)"
 
-#: templates/AKSubmission/akslot_delete.html:25
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:25
 msgid "Do you really want to delete this AK Slot?"
 msgstr "Willst du diesen AK-Slot wirklich löschen?"
 
-#: templates/AKSubmission/akslot_delete.html:45
+#: AKSubmission/templates/AKSubmission/akslot_delete.html:45
 msgid "Confirm"
 msgstr "Bestätigen"
 
-#: templates/AKSubmission/submission_base.html:13
+#: AKSubmission/templates/AKSubmission/submission_base.html:13
 msgid "Write to organizers of this event for questions and comments"
 msgstr "Fragen oder Kommentare? Schreib den Orgas dieses Events eine Mail"
 
-#: templates/AKSubmission/submission_overview.html:27
+#: AKSubmission/templates/AKSubmission/submission_overview.html:27
 msgid ""
 "On this page you can see a list of current AKs, change them and add new ones."
 msgstr ""
 "Auf dieser Seite kannst du eine Liste von aktuellen AKs sehen, diese "
 "bearbeiten und neue hinzufügen."
 
-#: templates/AKSubmission/submission_overview.html:34
-#: templates/AKSubmission/submit_new_wish.html:5
-#: templates/AKSubmission/submit_new_wish.html:11
-#: templates/AKSubmission/submit_new_wish.html:15
+#: AKSubmission/templates/AKSubmission/submission_overview.html:34
+#: AKSubmission/templates/AKSubmission/submit_new_wish.html:5
+#: AKSubmission/templates/AKSubmission/submit_new_wish.html:11
+#: AKSubmission/templates/AKSubmission/submit_new_wish.html:15
 msgid "New AK Wish"
 msgstr "Neuer AK-Wunsch"
 
-#: templates/AKSubmission/submission_overview.html:38
+#: AKSubmission/templates/AKSubmission/submission_overview.html:38
 msgid "Who"
 msgstr "Wer"
 
-#: templates/AKSubmission/submission_overview.html:41
+#: AKSubmission/templates/AKSubmission/submission_overview.html:41
 msgid "I do not own AKs yet"
 msgstr "Ich leite bisher keine AKs"
 
-#: templates/AKSubmission/submission_overview.html:49
-#: templates/AKSubmission/submit_new.html:8
-#: templates/AKSubmission/submit_new.html:21
-#: templates/AKSubmission/submit_new.html:28
+#: AKSubmission/templates/AKSubmission/submission_overview.html:49
+#: AKSubmission/templates/AKSubmission/submit_new.html:8
+#: AKSubmission/templates/AKSubmission/submit_new.html:21
+#: AKSubmission/templates/AKSubmission/submit_new.html:28
 msgid "New AK"
 msgstr "Neuer AK"
 
-#: templates/AKSubmission/submission_overview.html:55
+#: AKSubmission/templates/AKSubmission/submission_overview.html:55
 msgid "Edit Person Info"
 msgstr "Personen-Info bearbeiten"
 
-#: templates/AKSubmission/submission_overview.html:62
+#: AKSubmission/templates/AKSubmission/submission_overview.html:62
 msgid "This event is not active. You cannot add or change AKs"
 msgstr ""
 "Dieses Event is nicht aktiv. Es können keine AKs hinzugefügt oder bearbeitet "
 "werden"
 
-#: templates/AKSubmission/submission_overview.html:66
+#: AKSubmission/templates/AKSubmission/submission_overview.html:66
 msgid "Current AKs"
 msgstr "Aktuelle AKs"
 
-#: templates/AKSubmission/submit_new.html:41
+#: AKSubmission/templates/AKSubmission/submit_new.html:41
 msgid "Submit"
 msgstr "Eintragen"
 
-#: views.py:42
+#: AKSubmission/views.py:42
 msgid "Wishes"
 msgstr "Wünsche"
 
-#: views.py:42
+#: AKSubmission/views.py:42
 msgid "AKs one would like to have"
 msgstr ""
 "AKs die sich gewünscht wurden, aber bei denen noch nicht klar ist, wer sie "
 "macht. Falls du dir das vorstellen kannst, trag dich einfach ein"
 
-#: views.py:103
+#: AKSubmission/views.py:103
 msgid "AK successfully created"
 msgstr "AK erfolgreich angelegt"
 
-#: views.py:156
+#: AKSubmission/views.py:156
 msgid "AK successfully updated"
 msgstr "AK erfolgreich aktualisiert"
 
-#: views.py:211
+#: AKSubmission/views.py:222
 msgid "Person Info successfully updated"
 msgstr "Personen-Info erfolgreich aktualisiert"
 
-#: views.py:224
+#: AKSubmission/views.py:235
 msgid "No user selected"
 msgstr "Keine Person ausgewählt"
 
-#: views.py:250
+#: AKSubmission/views.py:261
 msgid "AK Slot successfully added"
 msgstr "AK-Slot erfolgreich angelegt"
 
-#: views.py:264
+#: AKSubmission/views.py:275
 msgid "You cannot edit a slot that has already been scheduled"
 msgstr "Bereits geplante AK-Slots können nicht mehr bearbeitet werden"
 
-#: views.py:274
+#: AKSubmission/views.py:285
 msgid "AK Slot successfully updated"
 msgstr "AK-Slot erfolgreich aktualisiert"
 
-#: views.py:287
+#: AKSubmission/views.py:298
 msgid "You cannot delete a slot that has already been scheduled"
 msgstr "Bereits geplante AK-Slots können nicht mehr gelöscht werden"
 
-#: views.py:297
+#: AKSubmission/views.py:308
 msgid "AK Slot successfully deleted"
 msgstr "AK-Slot erfolgreich angelegt"
diff --git a/AKSubmission/templates/AKSubmission/ak_detail.html b/AKSubmission/templates/AKSubmission/ak_detail.html
index d873f629..19394931 100644
--- a/AKSubmission/templates/AKSubmission/ak_detail.html
+++ b/AKSubmission/templates/AKSubmission/ak_detail.html
@@ -26,13 +26,19 @@
     {% include "AKSubmission/messages.html" %}
 
     <div class="float-right">
+        {% if ak.interest_counter >= 0 %}
+            {% trans 'Interest' %}: <b class='mx-1 text-muted'>{{ ak.interest_counter }}</b>
+            <a href="{% url 'submit:inc_interest' event_slug=ak.event.slug pk=ak.pk %}"
+               class="btn btn-primary">{% fa5_icon 'thumbs-up' 'fas' %}</a>
+        {% endif %}
         {% if ak.link != "" %}
             <a href="{{ ak.link }}" class="btn btn-info">{% fa5_icon 'external-link-alt' 'fas' %}</a>
         {% endif %}
         {% if ak.event.active %}
             <a href="{% url 'submit:ak_edit' event_slug=ak.event.slug pk=ak.pk %}"
                class="btn btn-success">{% fa5_icon 'pencil-alt' 'fas' %}</a>
-        {% endif %}    </div>
+        {% endif %}
+    </div>
 
     <h2>{% if ak.wish %}{% trans "AK Wish" %}: {% endif %}{{ ak.name }}</h2>
 
@@ -126,7 +132,7 @@
                 <td>
                     {% if not slot.start %}
                         <a href="{% url 'submit:akslot_edit' event_slug=ak.event.slug pk=slot.pk %}"
-                           class="btn btn-success">{% fa5_icon 'pencil-alt'  'fas' %}</a>
+                           class="btn btn-success">{% fa5_icon 'pencil-alt' 'fas' %}</a>
                         <a href="{% url 'submit:akslot_delete' event_slug=ak.event.slug pk=slot.pk %}"
                            class="btn btn-danger">{% fa5_icon 'times' 'fas' %}</a>
                     {% endif %}
diff --git a/AKSubmission/urls.py b/AKSubmission/urls.py
index 01bbcbad..71ed56f6 100644
--- a/AKSubmission/urls.py
+++ b/AKSubmission/urls.py
@@ -11,6 +11,7 @@ urlpatterns = [
             path('', views.SubmissionOverviewView.as_view(), name='submission_overview'),
             path('ak/<int:pk>/', views.AKDetailView.as_view(), name='ak_detail'),
             path('ak/<int:pk>/edit/', views.AKEditView.as_view(), name='ak_edit'),
+            path('ak/<int:pk>/interest/', views.AKInterestView.as_view(), name='inc_interest'),
             path('ak/<int:pk>/add_slot/', views.AKSlotAddView.as_view(), name='akslot_add'),
             path('akslot/<int:pk>/edit/', views.AKSlotEditView.as_view(), name='akslot_edit'),
             path('akslot/<int:pk>/delete/', views.AKSlotDeleteView.as_view(), name='akslot_delete'),
diff --git a/AKSubmission/views.py b/AKSubmission/views.py
index 9cff56f4..bd392637 100644
--- a/AKSubmission/views.py
+++ b/AKSubmission/views.py
@@ -5,7 +5,7 @@ from django.shortcuts import get_object_or_404, redirect
 from django.urls import reverse_lazy
 from django.utils.translation import gettext_lazy as _
 from django.views import View
-from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
+from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, RedirectView
 
 from AKModel.models import AK, AKCategory, AKTag, AKOwner, AKSlot
 from AKModel.views import EventSlugMixin
@@ -170,6 +170,18 @@ class AKEditView(EventSlugMixin, UpdateView):
         return super_form_valid
 
 
+class AKInterestView(RedirectView):
+    permanent = False
+    pattern_name = 'submit:ak_detail'
+
+    def get_redirect_url(self, *args, **kwargs):
+        ak = get_object_or_404(AK, pk=kwargs['pk'])
+        ak.increment_interest()
+        return super().get_redirect_url(*args, **kwargs)
+
+    pass
+
+
 class AKOwnerCreateView(EventSlugMixin, CreateView):
     model = AKOwner
     template_name = 'AKSubmission/akowner_create_update.html'
-- 
GitLab