diff --git a/aleksis/apps/kort/locale/ar/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/ar/LC_MESSAGES/django.po
index 6df710ddf6954b35c7a51068296d12c8f1bf16d4..bfb7b49c2de1be7f276e53b38d6163ddda0058fe 100644
--- a/aleksis/apps/kort/locale/ar/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/ar/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\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"
@@ -55,12 +55,12 @@ msgstr ""
 msgid "Groups"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -82,43 +82,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -126,188 +126,196 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -342,6 +350,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr ""
 
@@ -365,9 +374,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -384,6 +398,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -617,7 +635,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -630,6 +648,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -650,50 +676,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/de_DE/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/de_DE/LC_MESSAGES/django.po
index 52d13911397801b48cc76d6b536b3f40b117e84e..292c2d955ffe5be8fdf323b3c24a525f369e02f3 100644
--- a/aleksis/apps/kort/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/de_DE/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\n"
 "PO-Revision-Date: 2022-08-12 22:00+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-app-kort/de/>\n"
@@ -55,12 +55,12 @@ msgstr "Personen"
 msgid "Groups"
 msgstr "Gruppen"
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr "Kartenlayout"
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -82,43 +82,43 @@ msgstr "Allgemeine Attribute"
 msgid "Printer settings"
 msgstr "Druckereinstellungen"
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr "Benötigte Datenfelder"
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr "Online"
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr "Offline"
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr "Mit Fehlern"
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr "Nicht registriert"
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr "Registriert"
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr "In Bearbeitung"
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr "Beendet"
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr "Fehlgeschlagen"
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -126,188 +126,196 @@ msgstr "Fehlgeschlagen"
 msgid "Name"
 msgstr "Name"
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr "Ort"
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr "Status"
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr "Statustext"
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr "Zuletzt gesehen am"
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr "OAuth2-Anwendung"
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr "CUPS-Drucker"
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr "Kartennummer auf dem Server generieren"
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr "Karten-Detektor"
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr "Kartendrucker"
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr "Kartendrucker"
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr "Mediendatei"
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr "Mediendatei für ein Kartenlayout"
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr "Mediendateien für Kartenlayouts"
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr "Template"
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr "Benutzerdefiniertes CSS"
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr "Breite"
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr "in mm"
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr "Höhe"
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr "Template ist ungültig: {}"
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr "Kartenlayout"
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr "Kartenlayouts"
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr "Person"
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr "Chip-Nummer"
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr "Deaktiviert"
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr "Es wurde kein Layout für die Karte bereitgestellt."
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr "Karte"
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr "Karten"
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr "Drucker"
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr "Karten-Druckauftrag"
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr "Karten-Druckaufträge"
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr "Chip-Nummer"
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr "Aktueller Status"
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr "Aktionen"
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr "Druckername"
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr "Druckerort"
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr "Laufende Aufträge"
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr "Layoutname"
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr "Karte von %(person)s"
@@ -342,6 +350,7 @@ msgstr "Deaktivieren"
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr "Löschen"
 
@@ -370,9 +379,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr "Zurück"
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr "Kartendetails"
@@ -389,6 +403,12 @@ msgstr "Karte als PDF anzeigen"
 msgid "Generate card as PDF"
 msgstr "Karte als PDF generieren"
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+#, fuzzy
+#| msgid "Create card layout"
+msgid "Preview card layout"
+msgstr "Kartenlayout erstellen"
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -647,7 +667,7 @@ msgstr "3. Client einrichten"
 msgid "Print jobs"
 msgstr "Druckaufträge"
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr "Erstellt am"
 
@@ -660,6 +680,18 @@ msgstr "Kartendrucker bearbeiten"
 msgid "Register new card printer"
 msgstr "Neuen Kartendrucker registrieren"
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+#, fuzzy
+#| msgid "Delete Card Printer"
+msgid "Delete Card Print Job"
+msgstr "Kartendrucker löschen"
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+#, fuzzy
+#| msgid "Do you really want to delete the following card printer?"
+msgid "Do you really want to delete the following card print job?"
+msgstr "Möchten Sie wirklich den folgenden Kartendrucker löschen?"
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr "Die Karten wurden erfolgreich erstellt."
@@ -680,54 +712,59 @@ msgstr "Die Karte wurde erfolgreich gelöscht."
 msgid "The card has been deactivated successfully."
 msgstr "Die Karte wurde erfolgreich deaktiviert."
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr "Die Chip-Nummer fehlt."
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr "Fortschritt: Kartenlayout als PDF-Datei generieren"
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr "PDF-Datei wird generiert …"
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr "Die PDF-Datei mit dem Kartenlayout wurde erfolgreich erstellt."
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr "Karte anzeigen"
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr "Der Kartendrucker wurde erfolgreich erstellt."
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr "Der Kartendrucker wurde erfolgreich geändert."
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr "Der Kartendrucker wurde erfolgreich gelöscht."
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+#, fuzzy
+#| msgid "The card printer has been deleted successfully."
+msgid "The card print job has been deleted successfully."
+msgstr "Der Kartendrucker wurde erfolgreich gelöscht."
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr "Das Kartenlayout wurde erfolgreich erstellt."
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr "Das Kartenlayout wurde erfolgreich geändert."
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr "Das Kartenlayout wurde erfolgreich gelöscht."
 
+#~ msgid "The chip number is missing."
+#~ msgstr "Die Chip-Nummer fehlt."
+
 #~ msgid "Student ID Cards"
 #~ msgstr "Schülerausweise"
 
diff --git a/aleksis/apps/kort/locale/fr/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/fr/LC_MESSAGES/django.po
index c9d5aa80caed318e89b7c676ae9ed125d0e7942c..8caf4f69b2f8e9045554203fb208bca0215e1c51 100644
--- a/aleksis/apps/kort/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/fr/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\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"
@@ -55,12 +55,12 @@ msgstr ""
 msgid "Groups"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -82,43 +82,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -126,188 +126,196 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -342,6 +350,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr ""
 
@@ -365,9 +374,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -384,6 +398,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -617,7 +635,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -630,6 +648,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -650,50 +676,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/la/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/la/LC_MESSAGES/django.po
index b5cff3863512b848040abb8a51a1ce6415629548..0b716c83252bfa3aa7c9327efb9c781eb8d1ee6a 100644
--- a/aleksis/apps/kort/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/la/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\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"
@@ -54,12 +54,12 @@ msgstr ""
 msgid "Groups"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -81,43 +81,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -125,188 +125,196 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -341,6 +349,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr ""
 
@@ -364,9 +373,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -383,6 +397,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -616,7 +634,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -629,6 +647,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -649,50 +675,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/nb_NO/LC_MESSAGES/django.po
index b5cff3863512b848040abb8a51a1ce6415629548..0b716c83252bfa3aa7c9327efb9c781eb8d1ee6a 100644
--- a/aleksis/apps/kort/locale/nb_NO/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/nb_NO/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\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"
@@ -54,12 +54,12 @@ msgstr ""
 msgid "Groups"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -81,43 +81,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -125,188 +125,196 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -341,6 +349,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr ""
 
@@ -364,9 +373,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -383,6 +397,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -616,7 +634,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -629,6 +647,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -649,50 +675,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/ru/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/ru/LC_MESSAGES/django.po
index 194ff336e1e86e21c8802f07896463d148f92cd6..3fb7217ab01070117f47b92ebf93cf43b94f91e2 100644
--- a/aleksis/apps/kort/locale/ru/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/ru/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\n"
 "PO-Revision-Date: 2023-05-26 04:37+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
 "Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-app-kort/ru/>\n"
@@ -55,12 +55,12 @@ msgstr "Люди"
 msgid "Groups"
 msgstr "Группы"
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -82,43 +82,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -126,188 +126,196 @@ msgstr ""
 msgid "Name"
 msgstr "Полное имя"
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr "Описание"
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr "Нас.пункт"
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr "Состояние"
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr "Физлицо"
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr "Действия"
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -342,6 +350,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr "Удалить"
 
@@ -365,9 +374,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr "Назад"
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -384,6 +398,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -617,7 +635,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -630,6 +648,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -650,50 +676,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr "Создание файла PDF …"
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr "Во время создания файла PDF возникла проблема."
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/tr_TR/LC_MESSAGES/django.po
index b5cff3863512b848040abb8a51a1ce6415629548..0b716c83252bfa3aa7c9327efb9c781eb8d1ee6a 100644
--- a/aleksis/apps/kort/locale/tr_TR/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/tr_TR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\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"
@@ -54,12 +54,12 @@ msgstr ""
 msgid "Groups"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -81,43 +81,43 @@ msgstr ""
 msgid "Printer settings"
 msgstr ""
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -125,188 +125,196 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr ""
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr ""
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr ""
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr ""
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr ""
@@ -341,6 +349,7 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr ""
 
@@ -364,9 +373,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr ""
@@ -383,6 +397,10 @@ msgstr ""
 msgid "Generate card as PDF"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+msgid "Preview card layout"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -616,7 +634,7 @@ msgstr ""
 msgid "Print jobs"
 msgstr ""
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr ""
 
@@ -629,6 +647,14 @@ msgstr ""
 msgid "Register new card printer"
 msgstr ""
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+msgid "Delete Card Print Job"
+msgstr ""
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+msgid "Do you really want to delete the following card print job?"
+msgstr ""
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr ""
@@ -649,50 +675,50 @@ msgstr ""
 msgid "The card has been deactivated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr ""
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr ""
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+msgid "The card print job has been deleted successfully."
+msgstr ""
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr ""
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr ""
diff --git a/aleksis/apps/kort/locale/uk/LC_MESSAGES/django.po b/aleksis/apps/kort/locale/uk/LC_MESSAGES/django.po
index b4b39246f634ca5f9b333bc4b2fe7570af4f359d..ed0477d790083643fc26e452ec4a4f0e29e85f56 100644
--- a/aleksis/apps/kort/locale/uk/LC_MESSAGES/django.po
+++ b/aleksis/apps/kort/locale/uk/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-19 15:48+0100\n"
+"POT-Creation-Date: 2023-09-16 17:04+0200\n"
 "PO-Revision-Date: 2023-04-13 23:05+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
 "Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/aleksis-app-kort/uk/>\n"
@@ -55,12 +55,12 @@ msgstr "Особи"
 msgid "Groups"
 msgstr "Групи"
 
-#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:191
+#: aleksis/apps/kort/forms.py:51 aleksis/apps/kort/models.py:209
 msgid "Card layout"
 msgstr "Шаблон картки"
 
-#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:263
-#: aleksis/apps/kort/tables.py:30
+#: aleksis/apps/kort/forms.py:53 aleksis/apps/kort/models.py:281
+#: aleksis/apps/kort/tables.py:23
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:24
 #: aleksis/apps/kort/templates/kort/card/short.html:12
 msgid "Valid until"
@@ -82,43 +82,43 @@ msgstr "Основні атрибути"
 msgid "Printer settings"
 msgstr "Налаштування принтера"
 
-#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:228
+#: aleksis/apps/kort/forms.py:138 aleksis/apps/kort/models.py:246
 msgid "Required data fields"
 msgstr "Необхідні поля даних"
 
-#: aleksis/apps/kort/models.py:24
+#: aleksis/apps/kort/models.py:25
 msgid "Online"
 msgstr "Онлайн"
 
-#: aleksis/apps/kort/models.py:25
+#: aleksis/apps/kort/models.py:26
 msgid "Offline"
 msgstr "Офлайн"
 
-#: aleksis/apps/kort/models.py:26
+#: aleksis/apps/kort/models.py:27
 msgid "With errors"
 msgstr "З помилками"
 
-#: aleksis/apps/kort/models.py:27
+#: aleksis/apps/kort/models.py:28
 msgid "Not registered"
 msgstr "Не зареєстровано"
 
-#: aleksis/apps/kort/models.py:56
+#: aleksis/apps/kort/models.py:57
 msgid "Registered"
 msgstr "Зареєстровано"
 
-#: aleksis/apps/kort/models.py:57
+#: aleksis/apps/kort/models.py:58
 msgid "In progress"
 msgstr "Обробляється"
 
-#: aleksis/apps/kort/models.py:58
+#: aleksis/apps/kort/models.py:59
 msgid "Finished"
 msgstr "Завершено"
 
-#: aleksis/apps/kort/models.py:59
+#: aleksis/apps/kort/models.py:60
 msgid "Failed"
 msgstr "Збій"
 
-#: aleksis/apps/kort/models.py:64 aleksis/apps/kort/models.py:223
+#: aleksis/apps/kort/models.py:65 aleksis/apps/kort/models.py:241
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card_layout/short.html:4
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:11
@@ -126,188 +126,196 @@ msgstr "Збій"
 msgid "Name"
 msgstr "Повне ім'я"
 
-#: aleksis/apps/kort/models.py:65
+#: aleksis/apps/kort/models.py:66
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:24
 msgid "Description"
 msgstr "Опис"
 
-#: aleksis/apps/kort/models.py:66
+#: aleksis/apps/kort/models.py:67
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/printer/short.html:8
 msgid "Location"
 msgstr "Нас.пункт"
 
-#: aleksis/apps/kort/models.py:70 aleksis/apps/kort/models.py:336
-#: aleksis/apps/kort/tables.py:95
+#: aleksis/apps/kort/models.py:71 aleksis/apps/kort/models.py:354
+#: aleksis/apps/kort/tables.py:94
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:38
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:38
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:90
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:91
 #: aleksis/apps/kort/templates/kort/printer/short.html:12
 msgid "Status"
 msgstr "Стан"
 
-#: aleksis/apps/kort/models.py:74 aleksis/apps/kort/models.py:340
+#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/models.py:358
 msgid "Status text"
 msgstr "Опис стану"
 
-#: aleksis/apps/kort/models.py:75 aleksis/apps/kort/tables.py:58
+#: aleksis/apps/kort/models.py:76 aleksis/apps/kort/tables.py:52
 #: aleksis/apps/kort/templates/kort/printer/detail_content.html:31
 msgid "Last seen at"
 msgstr "Востаннє на зв'язку о"
 
-#: aleksis/apps/kort/models.py:80
+#: aleksis/apps/kort/models.py:81
 msgid "OAuth2 application"
 msgstr "Програма для OAuth2"
 
-#: aleksis/apps/kort/models.py:87
+#: aleksis/apps/kort/models.py:89
+msgid "OAuth2 client secret"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:95
 msgid "CUPS printer"
 msgstr "Принтер CUPS"
 
-#: aleksis/apps/kort/models.py:89
+#: aleksis/apps/kort/models.py:97
+msgid "Leave blank to deactivate CUPS printing"
+msgstr ""
+
+#: aleksis/apps/kort/models.py:100
 msgid "Generate card number on server"
 msgstr "Генерувати номер картки на сервері"
 
-#: aleksis/apps/kort/models.py:91
+#: aleksis/apps/kort/models.py:102
 msgid "Card detector"
 msgstr "Детектор карток"
 
-#: aleksis/apps/kort/models.py:181
+#: aleksis/apps/kort/models.py:199
 msgid "Card printer"
 msgstr "Принтер для карток"
 
-#: aleksis/apps/kort/models.py:182
+#: aleksis/apps/kort/models.py:200
 #: aleksis/apps/kort/templates/kort/printer/list.html:8
 #: aleksis/apps/kort/templates/kort/printer/list.html:9
 msgid "Card printers"
 msgstr "Принтери для карток"
 
-#: aleksis/apps/kort/models.py:186
+#: aleksis/apps/kort/models.py:204
 msgid "Media file"
 msgstr "Медіафайл"
 
-#: aleksis/apps/kort/models.py:198
+#: aleksis/apps/kort/models.py:216
 msgid "Media file for a card layout"
 msgstr "Медіафайл для шаблона карток"
 
-#: aleksis/apps/kort/models.py:199
+#: aleksis/apps/kort/models.py:217
 msgid "Media files for card layouts"
 msgstr "Медіафайли для шаблонів карток"
 
-#: aleksis/apps/kort/models.py:224
+#: aleksis/apps/kort/models.py:242
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:43
 msgid "Template"
 msgstr "Шаблон"
 
-#: aleksis/apps/kort/models.py:225
+#: aleksis/apps/kort/models.py:243
 #: aleksis/apps/kort/templates/kort/card_layout/detail_content.html:49
 msgid "Custom CSS"
 msgstr "Власний CSS"
 
-#: aleksis/apps/kort/models.py:226
+#: aleksis/apps/kort/models.py:244
 msgid "Width"
 msgstr "Ширина"
 
-#: aleksis/apps/kort/models.py:226 aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:244 aleksis/apps/kort/models.py:245
 msgid "in mm"
 msgstr "в мм"
 
-#: aleksis/apps/kort/models.py:227
+#: aleksis/apps/kort/models.py:245
 msgid "Height"
 msgstr "Висота"
 
-#: aleksis/apps/kort/models.py:248
+#: aleksis/apps/kort/models.py:266
 msgid "Template is invalid: {}"
 msgstr "Шаблон неправильний: {}"
 
-#: aleksis/apps/kort/models.py:254 aleksis/apps/kort/models.py:267
+#: aleksis/apps/kort/models.py:272 aleksis/apps/kort/models.py:285
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:31
 #: aleksis/apps/kort/templates/kort/card_layout/detail.html:8
 msgid "Card Layout"
 msgstr "Шаблон картки"
 
-#: aleksis/apps/kort/models.py:255
+#: aleksis/apps/kort/models.py:273
 msgid "Card Layouts"
 msgstr "Шаблони карток"
 
-#: aleksis/apps/kort/models.py:260
+#: aleksis/apps/kort/models.py:278 aleksis/apps/kort/tables.py:20
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:11
 #: aleksis/apps/kort/templates/kort/card/short.html:4
 msgid "Person"
 msgstr "Особа"
 
-#: aleksis/apps/kort/models.py:262
+#: aleksis/apps/kort/models.py:280
 msgid "Chip Number"
 msgstr "Номер чипа"
 
-#: aleksis/apps/kort/models.py:264 aleksis/apps/kort/tables.py:31
+#: aleksis/apps/kort/models.py:282 aleksis/apps/kort/tables.py:24
 msgid "Deactivated"
 msgstr "Деактивовано"
 
-#: aleksis/apps/kort/models.py:270
+#: aleksis/apps/kort/models.py:288
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/apps/kort/models.py:303
+#: aleksis/apps/kort/models.py:321
 msgid "There is no layout provided for the card."
 msgstr "Для картки не задано шаблон."
 
-#: aleksis/apps/kort/models.py:322 aleksis/apps/kort/models.py:331
+#: aleksis/apps/kort/models.py:340 aleksis/apps/kort/models.py:349
 #: aleksis/apps/kort/templates/kort/card/detail.html:8
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:84
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:85
 msgid "Card"
 msgstr "Картка"
 
-#: aleksis/apps/kort/models.py:323
+#: aleksis/apps/kort/models.py:341
 #: aleksis/apps/kort/templates/kort/card/list.html:8
 #: aleksis/apps/kort/templates/kort/card/list.html:9
 msgid "Cards"
 msgstr "Картки"
 
-#: aleksis/apps/kort/models.py:328
+#: aleksis/apps/kort/models.py:346
 msgid "Printer"
 msgstr "Принтер"
 
-#: aleksis/apps/kort/models.py:343
+#: aleksis/apps/kort/models.py:361
 msgid "Card print job"
 msgstr "Завдання друку карток"
 
-#: aleksis/apps/kort/models.py:344
+#: aleksis/apps/kort/models.py:362
 msgid "Card print jobs"
 msgstr "Завдання друку карток"
 
-#: aleksis/apps/kort/tables.py:28
+#: aleksis/apps/kort/tables.py:21
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:17
 #: aleksis/apps/kort/templates/kort/card/short.html:8
 msgid "Chip number"
 msgstr "Номер чипа"
 
-#: aleksis/apps/kort/tables.py:29 aleksis/apps/kort/tables.py:57
+#: aleksis/apps/kort/tables.py:22 aleksis/apps/kort/tables.py:51
 msgid "Current status"
 msgstr "Поточний стан"
 
-#: aleksis/apps/kort/tables.py:32 aleksis/apps/kort/tables.py:61
-#: aleksis/apps/kort/tables.py:85
+#: aleksis/apps/kort/tables.py:25 aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:81
 msgid "Actions"
 msgstr "Дії"
 
-#: aleksis/apps/kort/tables.py:54
+#: aleksis/apps/kort/tables.py:48
 msgid "Printer name"
 msgstr "Назва принтера"
 
-#: aleksis/apps/kort/tables.py:55
+#: aleksis/apps/kort/tables.py:49
 msgid "Printer location"
 msgstr "Розташування принтера"
 
-#: aleksis/apps/kort/tables.py:59
+#: aleksis/apps/kort/tables.py:53
 msgid "Running jobs"
 msgstr "Поточні завдання"
 
-#: aleksis/apps/kort/tables.py:81
+#: aleksis/apps/kort/tables.py:77
 msgid "Layout name"
 msgstr "Назва шаблону"
 
 #: aleksis/apps/kort/templates/kort/card/actions.html:8
-#: aleksis/apps/kort/templates/kort/card/detail.html:9
+#: aleksis/apps/kort/templates/kort/card/detail.html:13
 #, python-format
 msgid "Card of %(person)s"
 msgstr "Картка для %(person)s"
@@ -342,6 +350,7 @@ msgstr "Деактивувати"
 #: aleksis/apps/kort/templates/kort/printer/actions.html:33
 #: aleksis/apps/kort/templates/kort/printer/delete.html:29
 #: aleksis/apps/kort/templates/kort/printer/detail.html:31
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:22
 msgid "Delete"
 msgstr "Видалити"
 
@@ -370,9 +379,14 @@ msgstr ""
 #: aleksis/apps/kort/templates/kort/card/delete.html:26
 #: aleksis/apps/kort/templates/kort/card_layout/delete.html:25
 #: aleksis/apps/kort/templates/kort/printer/delete.html:25
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:18
 msgid "Go back"
 msgstr "Назад"
 
+#: aleksis/apps/kort/templates/kort/card/detail.html:11
+msgid "Back"
+msgstr ""
+
 #: aleksis/apps/kort/templates/kort/card/detail_content.html:6
 msgid "Card details"
 msgstr "Дані картки"
@@ -389,6 +403,12 @@ msgstr "Показати картку як PDF"
 msgid "Generate card as PDF"
 msgstr "Створити картку як PDF"
 
+#: aleksis/apps/kort/templates/kort/card/detail_content.html:68
+#, fuzzy
+#| msgid "Create card layout"
+msgid "Preview card layout"
+msgstr "Створити шаблон картки"
+
 #: aleksis/apps/kort/templates/kort/card/edit.html:12
 #: aleksis/apps/kort/templates/kort/card/edit.html:13
 msgid "Edit card"
@@ -647,7 +667,7 @@ msgstr "3. Налаштувати клієнт"
 msgid "Print jobs"
 msgstr "Завдання друку"
 
-#: aleksis/apps/kort/templates/kort/printer/detail_content.html:87
+#: aleksis/apps/kort/templates/kort/printer/detail_content.html:88
 msgid "Created at"
 msgstr "Створено о"
 
@@ -660,6 +680,18 @@ msgstr "Редагувати принтер для карток"
 msgid "Register new card printer"
 msgstr "Зареєструвати новий принтер для карток"
 
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:8
+#, fuzzy
+#| msgid "Delete Card Printer"
+msgid "Delete Card Print Job"
+msgstr "Видалити принтер для карток"
+
+#: aleksis/apps/kort/templates/kort/printer/print_job_delete.html:12
+#, fuzzy
+#| msgid "Do you really want to delete the following card printer?"
+msgid "Do you really want to delete the following card print job?"
+msgstr "Ви дійсно хочете видалити цей принтер для карток?"
+
 #: aleksis/apps/kort/views.py:69
 msgid "The cards have been created successfully."
 msgstr "Картки були успішно створені."
@@ -680,50 +712,55 @@ msgstr "Картка успішно видалена."
 msgid "The card has been deactivated successfully."
 msgstr "Картка була успішно деактивована."
 
-#: aleksis/apps/kort/views.py:220
-msgid "The chip number is missing."
-msgstr "Номер чипа відсутній."
-
-#: aleksis/apps/kort/views.py:232
+#: aleksis/apps/kort/views.py:238
 msgid "Progress: Generate card layout as PDF file"
 msgstr "Прогрес: Збереження шаблону картки у файл PDF"
 
-#: aleksis/apps/kort/views.py:233
+#: aleksis/apps/kort/views.py:239
 msgid "Generating PDF file …"
 msgstr "Створення файлу PDF …"
 
-#: aleksis/apps/kort/views.py:234
+#: aleksis/apps/kort/views.py:240
 msgid "The PDF file with the card layout has been generated successfully."
 msgstr "Файл PDF з шаблоном картки успішно збережений."
 
-#: aleksis/apps/kort/views.py:235
+#: aleksis/apps/kort/views.py:241
 msgid "There was a problem while generating the PDF file."
 msgstr "Під час створення файлу PDF виникла проблема."
 
-#: aleksis/apps/kort/views.py:237
+#: aleksis/apps/kort/views.py:243
 msgid "Show card"
 msgstr "Показати картку"
 
-#: aleksis/apps/kort/views.py:275
+#: aleksis/apps/kort/views.py:281
 msgid "The card printer has been created successfully."
 msgstr "Принтер для карток успішно створений."
 
-#: aleksis/apps/kort/views.py:288
+#: aleksis/apps/kort/views.py:294
 msgid "The card printer has been changed successfully."
 msgstr "Принтер для карток успішно змінений."
 
-#: aleksis/apps/kort/views.py:301
+#: aleksis/apps/kort/views.py:307
 msgid "The card printer has been deleted successfully."
 msgstr "Принтер для карток успішно видалений."
 
-#: aleksis/apps/kort/views.py:364
+#: aleksis/apps/kort/views.py:317
+#, fuzzy
+#| msgid "The card printer has been deleted successfully."
+msgid "The card print job has been deleted successfully."
+msgstr "Принтер для карток успішно видалений."
+
+#: aleksis/apps/kort/views.py:380
 msgid "The card layout has been created successfully."
 msgstr "Шаблон картки успішно створений."
 
-#: aleksis/apps/kort/views.py:382
+#: aleksis/apps/kort/views.py:398
 msgid "The card layout has been changed successfully."
 msgstr "Шаблон картки успішно змінений."
 
-#: aleksis/apps/kort/views.py:395
+#: aleksis/apps/kort/views.py:411
 msgid "The card layout has been deleted successfully."
 msgstr "Шаблон картки успішно видалений."
+
+#~ msgid "The chip number is missing."
+#~ msgstr "Номер чипа відсутній."