From 4fe3b832bd85acb1fcc78f3b675ce2174f094f33 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Fri, 24 Jun 2022 21:21:52 +0200
Subject: [PATCH] [WIP] Implement barcode scanner for username in checkpoint

---
 aleksis/apps/paweljong/forms.py                    |  2 +-
 .../paweljong/static/js/paweljong/checkpoint.js    | 14 ++++++++++++++
 .../templates/paweljong/event/checkpoint.html      |  3 +++
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/paweljong/forms.py b/aleksis/apps/paweljong/forms.py
index 38fb03d..df90a6f 100644
--- a/aleksis/apps/paweljong/forms.py
+++ b/aleksis/apps/paweljong/forms.py
@@ -505,7 +505,7 @@ class PersonGroupFormPerson(forms.Form):
 
 class EventCheckpointForm(forms.Form):
     class Media:
-        js = ("js/paweljong/checkpoint.js",)
+        js = ("https://unpkg.com/html5-qrcode", "js/paweljong/checkpoint.js")
 
     layout = Layout(
         "username", "comment".
diff --git a/aleksis/apps/paweljong/static/js/paweljong/checkpoint.js b/aleksis/apps/paweljong/static/js/paweljong/checkpoint.js
index 6ca40ad..74524ac 100644
--- a/aleksis/apps/paweljong/static/js/paweljong/checkpoint.js
+++ b/aleksis/apps/paweljong/static/js/paweljong/checkpoint.js
@@ -11,8 +11,22 @@ function setCheckpointCoords(position) {
     }, 3000);
 }
 
+function onScanSuccess(decodedText, decodedResult) {
+    $("[name='username']").val(decodedText);
+    if ($("[name='username']").is(":focus") && $("[name='comment']").val()) {
+        $("[name='username']").closest("form").submit();
+    }
+}
+
+function onScanFailure(error) {
+    alert(`Code scan error: ${error}`);
+}
+
 $(document).ready(function($) {
     if (navigator.geolocation) {
         getCheckpointCoords();
     }
+
+    var scanner = new Html5QrcodeScanner("reader", { fps: 10, qrbox: {width: 250, height: 250} }, false);
+    scanner.render(onScanSuccess, onScanError);
 });
diff --git a/aleksis/apps/paweljong/templates/paweljong/event/checkpoint.html b/aleksis/apps/paweljong/templates/paweljong/event/checkpoint.html
index 29eb19d..c683717 100644
--- a/aleksis/apps/paweljong/templates/paweljong/event/checkpoint.html
+++ b/aleksis/apps/paweljong/templates/paweljong/event/checkpoint.html
@@ -15,6 +15,9 @@
     {% form form=form %}{% form %}
     {% include "core/partials/save_button.html" %}
   </form>
+
+  <div id="reader"></div>
+
   {{ form.media.js }}
 
 {% endblock %}
-- 
GitLab